精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

軍工物聯網技術:C++模擬實現Qt的信號與槽機制

開發 前端
對于大多學習Qt的朋友,心中都有種好奇——那就是Qt最核心的信號與槽是如何實現的,對于小編自己也是一樣,當然大家肯定都會去查閱相關資料,但大部分時候也只是一知半解,如果說要自己實現就會又摸不著頭腦了;所以小編決定自己親自用C++實現一個簡單版的信號槽,來理解Qt的實現原理。

對于大多學習Qt的朋友,心中都有種好奇——那就是Qt最核心的信號與槽是如何實現的,對于小編自己也是一樣,當然大家肯定都會去查閱相關資料,但大部分時候也只是一知半解,如果說要自己實現就會又摸不著頭腦了;所以小編決定自己親自用C++實現一個簡單版的信號槽,來理解Qt的實現原理。于是小編就在翻閱各牛人朋友的博客和反復研究Qt源碼自己重新寫了一下以便交流學習。

[[441745]]

我們先還是簡單的梳理一下Qt信號與槽的實現機理:在Qt中實現信號與槽最重要的就是通過元對象系統(MOS)的元對象編譯器(MOC)將我們定義的需要使用到信號與槽的類中的信號及信號調用槽函數的方法進行定義(這一步就會生成與源文件對應的moc_xx.cpp文件),然后通過系統提供的關聯方法(connect)將信號與槽建立一一對應關系,當發射信號(其實就是調用信號函數)時就會通過信號與槽的對應關系找到對應槽函數進行調用。這樣的好處就是對于使用者而言不必去關心函數指針回調函數這些對于初學者比較不太容易搞清晰的東西,簡化了使用者的操作。當然就像我們在享受幸福生活的時候,就一定有人在我們背后默默付出砥礪前行!這里也一樣,對于我們使用者簡化了操作,那為了實現這樣的效果就需要在后臺提供更多的支持。接下來我們就通過代碼再來梳理一遍。

首先我們使用信號與槽肯定就會有信號的發送者與接收者,所以我們就先去定義這兩個類對象: 

  1. sender.h  
  2. #pragma once  
  3. #include "object.h"  
  4. class Sender : public Object  
  5.  
  6. X_OBJECT  
  7. public 
  8. Sender(int n = 0) : m_num(n){  
  9.  
  10. void sendSig();  
  11. signals:  
  12. void holdClass(int n);  
  13. int m_num;  
  14. };  
  15. sender.cpp  
  16. #include "sender.h"  
  17. void Sender::sendSig()  
  18.  
  19. std::cout << "發送信號:holdClass" << std::endl;  
  20. emit holdClass(m_num); 
  21.  

在Qt中需要使用信號槽的對象都需要直接或間接繼承一個類QObject,并且需要添加一個私有宏定義Q_OBJECT,這里就用Object和X_OBJECT代替,signals是Qt中用于聲明信號函數的關鍵字,emit是Qt中用于發送信號定義的關鍵字,這里我們先假設已經有這些類和宏定義,注意信號函數是不需要我們定義的,他是在MOC預處理生成的moc_xx.cpp中自動生成定義的,所以這里的cpp很簡單只有一個普通函數sendSig()的定義。同理我們再自己定義一個信號的接收者對象和其對應的槽函數。 

  1. receiver.h  
  2. #pragma once  
  3. #include "object.h"  
  4. class Receiver : public Object  
  5.  
  6. X_OBJECT  
  7. public 
  8. Receiver() {  
  9.  
  10. public slots:  
  11. void attendClass(int n);  
  12. };  
  13. receiver.cpp  
  14. #include "receiver.h"  
  15. void Receiver::attendClass(int n)  
  16.  
  17. std::cout << "執行槽函數attendClass:cur class " << n << std::endl;  

這里的slots就是Qt中用于標識槽函數聲明的關鍵字,槽函數是需要用戶自己定義的。

然后我們就需要再將發送者信號與接收者槽關聯起來,我們這就提供一個主函數來模擬關聯信號與槽,讓發送者產生信號: 

  1. main.cpp  
  2. #include "sender.h"  
  3. #include "receiver.h"  
  4. int main()  
  5.  
  6. Sender xuedao(9527);  
  7. Receiver rjc;  
  8. Object::connect(&xuedao, SIGNAL(holdClass(int)), &rjc, SLOT(attendClass(int)));  
  9. xuedao.sendSig();  
  10. return 0;  

這里的SIGNAL與SLOT在Qt中就是兩個轉換字符串的宏定義,connect是QObject的一個靜態函數方法。

我們要想這個程序能正常運行起來,接下來我們就需要去定義一個類似QObject的Object類和上面需要用到的關鍵字與宏定義,以及模擬MOC預處理產生對應的moc_xx.cpp,里面細節的地方為了方便理解我都通過代碼注釋解釋說明了 

  1. object.h  
  2. #pragma once  
  3. #include  
  4. #include  
  5. #include  
  6. #include  
  7. #define signals protected  
  8. #define slots  
  9. #define emit 
  10.  #define SLOT(slt) "1"#slt // 1用于標識槽函數  
  11. #define SIGNAL(sig) "2"#sig //2用于標識信號  
  12. class Object; 
  13.  struct MetaObject  
  14.  
  15. //每個對象可能會有多個信號與槽函數,這里就用兩個vector分別保存信號與槽函數信息操作起來方便點  
  16. std::vector sigs;  
  17. std::vector slts;  
  18. //activate的功能是通過信號發送者即信號索引找到關聯接收者和方法索引并調用對應方法  
  19. static void activate(Object *sender, int idx, void **argv); //void **argv對應信號傳遞的參數  
  20. struct Connection //用于打包信號接收者與方法的索引(對應上面定義的vector中的信號槽的索引) 
  21.   
  22. Object *m_receiver;  
  23. int method;  
  24. };  
  25. };  
  26. //Q_OBJECT宏中定義的比較多這里只選擇了我們需使用的幾個  
  27. //static MetaObject meta用于保存使用該宏定義對象中的信號與槽信號與槽的相關信息  
  28. //getMetaObject()用于返回發送者或接收者對象中的static MetaObject meta對象 
  29.  #define X_OBJECT static MetaObject meta; \  
  30. virtual MetaObject *getMetaObject(); \  
  31. virtual void metaCall(int idx, void **argv); //idx為對應槽函數的索引,void**argv用于接收信號傳遞的參數  
  32. class Object //需要使用信號槽對象的公共接口對象  
  33.  X_OBJECT  
  34. public 
  35. virtual ~Object() {}  
  36. //connect用于建立信號與槽的關聯信息  
  37. static void connect(Object *sender, const char *s1, Object *receiver, const char *s2);  
  38. private: 
  39.  
  40. friend class MetaObject; //用于方便meta對象訪問下面的信號槽map  
  41. std::multimap mp; //用于保存信號索引與接收者對象即索引的對應關系  
  42. //由于一個信號可以對應多個槽,同樣多個信號也可以對應一個槽,所以這里選用了multimap容器做對應關系映射  
  43. }; 
  44.  
  45. object.cpp  
  46. #include "object.h"  
  47. #include //調用strcmp函數需要包含  
  48. void MetaObject::activate(Object *sender, int idx, void **argv)  
  49.  //在信號槽對應關系的mp中找到發送者idx索引信號對應的接收者及關聯方法的調用 
  50.  
  51. auto ptr = sender->mp.equal_range(idx);  
  52. for(auto it = ptr.first; it != ptr.second; it++) {  
  53. MetaObject::Connection con = it->second
  54.  con.m_receiver->metaCall(con.method, argv); //調用接收者與發送者信號關聯的方法,并傳遞需要的參數  
  55.  
  56.  
  57. void Object::connect(Object *sender, const char *s1, Object *receiver, const char *s2)  
  58.  
  59. int sig_idx = -1, slt_idx = -1;  
  60. MetaObject *senderMeta = sender->getMetaObject(); //獲取發送者中保存的meta對象  
  61. MetaObject *receiverMeta = receiver->getMetaObject(); //獲取接收中保存的meta對象  
  62. //比對信號名稱找到對應的信號索引 
  63.  
  64. for(int i = 0; i < senderMeta->sigs.size(); i++) {  
  65. if(0 == strcmp(s1+1, senderMeta->sigs[i].c_str())) {  
  66. sig_idx = i; 
  67.  
  68.  
  69.  
  70. //這里確認是槽函數,并找到對應的槽函數索引  
  71. //如果有信號與信號關聯的情況這里就需要去查找接收者對應的信號索引,這里省略了  
  72. if('1' == *s2) { 
  73.  for(int i = 0; i < receiverMeta->slts.size(); i++) {  
  74. if(0 == strcmp(s2+1, receiverMeta->slts[i].c_str())) {  
  75. slt_idx = i; 
  76.  
  77.  
  78.  
  79.  
  80. if(-1 == sig_idx || -1 == slt_idx) { 
  81.  
  82. std::cout << "no match sig or slt" << std::endl;  
  83.  
  84. //利用multimap建立信號索引與接收者和方法索引的對應關系  
  85. MetaObject::Connection con = {receiver, slt_idx};  
  86. sender->mp.insert(std::make_pair(sig_idx, con));  
  87.  
  88. //下面的主要是預留的方便父類調用子類重寫方法的接口這里簡單定義即可  
  89. void Object::metaCall(int idx, void **ag) 
  90.  
  91.  
  92.  
  93. MetaObject Object::meta;  
  94. MetaObject *Object::getMetaObject()  
  95.  
  96. return &meta;  

下面就輪到MOC生成的moc_xx.cpp,這些文件在Qt中是自動生成的不需要我們實現,我這里只能手動模擬簡單的實現發送者的moc_sender.cpp與接收者的moc_receiver.cpp最終我們編譯程序是需要將這兩個文件一起編譯才能通過的。 

  1. moc_sender.cpp  
  2. #include "sender.h"  
  3. //根據定義的信號槽順序將信號與槽函數名稱進行保存,Qt中會將函數名稱參數分開保存處理,這里簡單模擬以下就好  
  4. static const char *sigs_name[] = {"holdClass(int)"};  
  5. static const char *slts_name[] = {nullptr}; //空表示當前沒有定義對應的函數  
  6. static std::vector sigs(sigs_name, sigs_name+1);  
  7. static std::vector slts;  
  8. MetaObject Sender::meta = {sigs, slts};  
  9. //Sender的信號定義  
  10. void Sender::holdClass(int n)  
  11.  
  12. void *arg[] = {(void *)&n};  
  13. //調用MetaObject的靜態方法activate傳遞當前的信號發送者對象、信號索引及參數  
  14. MetaObject::activate(this, 0, arg); //0表示當前信號函數在sigs_name[]中的索引 
  15.   
  16. MetaObject *Sender::getMetaObject()  
  17.  
  18. return &meta; //返回Sender的meta對象  
  19.  
  20. void Sender::metaCall(int idx, void **arg)  
  21.  
  22. // 我們這里Sender 中沒有槽函數所以這里沒任何操作  
  23.  
  24. moc_receiver.cpp 
  25.  #include "receiver.h"  
  26. static const char *sigs_name[] = {nullptr};  
  27. static const char *slts_name[] = {"attendClass(int)"};  
  28. static std::vector sigs;  
  29. static std::vector slts(slts_name, slts_name+1);  
  30. MetaObject Receiver::meta = {sigs, slts};  
  31. MetaObject *Receiver::getMetaObject()  
  32.  
  33. return &meta; //返回Receiver的meta對象  
  34.  
  35. void Receiver::metaCall(int idx, void **arg)  
  36.  
  37. //這里根據slts_name[]中的索引值調用對應的槽函數  
  38. if(0 == idx) {  
  39. int n = *((int *)arg[0]);  
  40. attendClass(n);  
  41.  

有了上面這些文件最后我們只需要將所有的.cpp文件一起編譯運行就可以實現Qt中信號與槽的效果了:

  1. g++ object.cpp sender.cpp receiver.cpp moc_sender.cpp moc_receiver.cpp main.cpp -o xuedao 

也可用其他可使用的編譯器編譯進行編譯,這里直接用的g++。 

另外如果某個對象修改或增刪了信號或槽就需要去手動修改對應的moc_xx.cpp文件即可,Qt中實現考慮的實際問題會更多,這里只是把整個信號槽關聯及調用流程框架進行了梳理,具體的大家可以參考Qt源碼做深入學習。

 

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2011-06-09 09:45:35

Linux QT 信號

2011-06-13 10:21:25

QT 信號 槽機制

2011-06-23 14:40:13

Qt 信號

2011-06-15 14:38:01

QT 信號

2011-02-22 16:47:34

物聯網組網

2021-03-23 09:36:33

物聯網開源技術

2022-09-19 23:20:09

物聯網工業4.0工業物聯網

2021-03-09 10:30:26

物聯網技術物聯網IOT

2023-11-02 11:59:04

物聯網預測維護

2023-08-17 11:32:07

2018-06-28 23:03:10

物聯網云梯電梯

2020-11-03 13:35:06

物聯網

2024-05-07 10:27:19

2018-07-04 13:24:47

物聯網IOT智能交通

2019-07-09 13:12:15

工業物聯網技術IIoT物聯網

2021-11-16 15:38:40

物聯網IOT人工智能

2023-08-01 10:09:59

物聯網IoT

2019-07-30 07:29:03

2020-04-30 21:09:16

物聯網邊緣計算技術

2021-05-02 23:42:25

物聯網農業技術
點贊
收藏

51CTO技術棧公眾號

日韩精品无码一区二区三区久久久 | 奇米成人av国产一区二区三区| 男人添女人荫蒂国产| 黄色成人在线网| 国产黄色精品网站| 亚洲性xxxx| 亚洲成人av免费观看| 久草在线中文最新视频| 国产精品久久久久影院老司| 国产精品美女诱惑| 中文字幕码精品视频网站| 欧美人成在线| 伊人青青综合网站| 亚洲无人区码一码二码三码| 亚洲wwww| 亚洲综合一区二区三区| 日韩偷拍一区二区| 亚洲在线视频播放| 老司机一区二区三区| 另类少妇人与禽zozz0性伦| 中文字字幕码一二三区| 日韩免费精品| 亚洲超丰满肉感bbw| 亚洲一区二区三区免费看| 天天干,夜夜爽| 日韩高清不卡一区二区| 久久天堂电影网| 国产精品一二三区在线观看| 国产厕拍一区| 91麻豆精品国产| 国产日韩成人内射视频| jizz性欧美10| 中文字幕在线一区免费| 欧美福利精品| 亚洲第一精品网站| 国内精品免费**视频| 欧美孕妇孕交黑巨大网站| 中文字幕电影av| 色欧美自拍视频| 伊人av综合网| 精品人妻无码一区二区三区换脸| 久久99精品国产自在现线| 91精品国产麻豆| 制服丝袜中文字幕第一页| 中文字幕在线视频网站| 亚洲sss视频在线视频| 午夜探花在线观看| 黄色网址在线免费观看| 国产精品大尺度| 久久精品99| 色视频在线看| 99re这里只有精品6| 国产一区二区高清不卡| www.色亚洲| 狠狠色狠狠色综合日日91app| 欧洲s码亚洲m码精品一区| 久久精品欧美一区二区| 国产精品久久久久久久免费观看| 国产一区二区黑人欧美xxxx| 性猛交娇小69hd| 日韩一区电影| 精品国产一区二区在线| 51妺嘿嘿午夜福利| 日韩精品免费一区二区三区| 色妞在线综合亚洲欧美| 俄罗斯毛片基地| 国产精品久久久久久麻豆一区软件 | 欧美精品vⅰdeose4hd| 毛片毛片毛片毛| 国产一区二区三区精品在线观看| 欧美一区二区福利在线| 欧美高清精品一区二区| 国产精品18hdxxxⅹ在线| 亚洲高清一区二| 国产伦理在线观看| 日韩高清在线免费观看| 亚洲国产精品一区二区久| 内射中出日韩无国产剧情| 国产一区二区三区四区五区传媒 | 日韩成人毛片视频| 伊人久久综合| 国产成人jvid在线播放| 91亚洲国产成人久久精品麻豆| 国产精品一二三四五| 国产另类第一区| 视频午夜在线| 国产精品国产成人国产三级 | 国产日韩欧美一区| 96精品视频在线| 免费观看成人毛片| 免费看日韩精品| 国产精品v欧美精品v日韩| 青青草av免费在线观看| 亚洲人成影院在线观看| 国产免费黄色小视频| 在线最新版中文在线| 欧美日韩亚洲综合| 四季av综合网站| 水蜜桃精品av一区二区| 97精品国产97久久久久久免费| 日本成人一级片| 成人网在线免费视频| 精品一区二区三区免费毛片| 蜜桃视频在线入口www| 亚洲欧美一区二区不卡| 茄子视频成人免费观看| 国产一区二区三区视频在线| 亚洲欧美制服中文字幕| 国产亚洲精品成人| 久久精品国产亚洲aⅴ| 精品国产乱码久久久久久蜜柚| 婷婷在线视频| 狠狠爱在线视频一区| 69久久精品无码一区二区| 精品国产乱码久久久久久蜜坠欲下 | 亚洲自拍小视频| jizzjizz在线观看| 欧美日韩国产综合新一区 | 欧美精品生活片| 日韩手机在线观看| 国产毛片精品视频| 品久久久久久久久久96高清| 精品美女在线观看视频在线观看| 精品久久久久久久久久久久久久 | 日韩欧美中文字幕一区二区三区| 伊人久久五月天| 午夜婷婷在线观看| 国产激情一区二区三区桃花岛亚洲| 水蜜桃一区二区三区| 欧美videossex| 日韩午夜中文字幕| 日本二区三区视频| 蜜臀国产一区二区三区在线播放| 蜜桃臀一区二区三区| av资源新版天堂在线| 日韩精品一区二| 久久婷婷五月综合| 蜜桃av一区| 麻豆一区区三区四区产品精品蜜桃| 日韩影视在线| 日韩女优毛片在线| 麻豆成人在线视频| 国产精品一区二区你懂的| 最新欧美日韩亚洲| 四虎国产精品永久在线国在线| 一区二区三区视频在线 | 888av在线视频| 精品国产sm最大网站免费看| 久久这里只有精品国产| 懂色av中文一区二区三区 | 91在线三级| 欧美va在线播放| 久久久久久天堂| 成人听书哪个软件好| 精品一区二区三区无码视频| 日韩一二三区在线观看| 久久不射热爱视频精品| 精品久久久久中文慕人妻| 一区二区三区免费网站| 日本精品一二三区| 亚洲性图久久| 蜜桃传媒视频麻豆第一区免费观看 | 婷婷亚洲成人| 国产99视频在线观看| a√资源在线| 91精品国产高清一区二区三区| 超碰手机在线观看| 成人高清视频在线| 六月丁香激情网| 真实原创一区二区影院| 国产精品91免费在线| 免费a在线看| 日韩精品在线一区| 亚洲精品男人天堂| 中文字幕第一区综合| 手机在线免费毛片| 在线综合欧美| 亚洲欧美日韩国产yyy| 国产成人视屏| 91精品国产高清久久久久久91 | 欧美精品在线视频观看| 手机看片一区二区三区| 欧美亚洲国产怡红院影院| 国产免费一区二区三区网站免费| 青青草精品视频| 日本大胆人体视频| 一区二区三区日本久久久| 国产精品偷伦免费视频观看的| 中文字幕在线观看播放| 精品亚洲精品福利线在观看| 中文字幕一区二区人妻| 中文字幕一区av| 国产黄色三级网站| 日韩国产成人精品| www.亚洲成人网| 欧美天天综合| 97碰碰视频| 欧美成人app| 午夜精品久久久久久久久久久久久| 国产女人在线观看| 精品88久久久久88久久久| 懂色av蜜臀av粉嫩av喷吹 | 亚洲欧美日韩一区二区三区四区| 久久精品日产第一区二区三区高清版 | 国产原创一区| 2018中文字幕一区二区三区| 免费大片在线观看www| 亚洲精品www| 99在线小视频| 欧美三电影在线| 亚洲图片在线视频| 怡红院av一区二区三区| 激情五月深爱五月| 久久综合九色综合久久久精品综合| 久久综合在线观看| 日韩成人精品在线观看| 国产中文字幕在线免费观看| 91精品99| 伊人精品久久久久7777| 国产剧情在线观看一区| 国产一级精品aaaaa看| 欧美经典影片视频网站| 国产精品久久久久久久久久新婚| 91在线三级| 欧美精品videosex牲欧美| 日本a在线播放| 国产一区二区三区在线观看网站| 懂色av一区二区三区四区| 91精品国产综合久久国产大片| 国产成人av免费| 91久久一区二区| 极品国产91在线网站| 偷拍日韩校园综合在线| 国产精品白浆一区二小说| 国产精品传媒在线| 老熟妇高潮一区二区三区| 国产精品视频一二三| www色com| 国产精品麻豆网站| www成人啪啪18软件| 国产精品视频九色porn| 亚洲色图14p| 国产电影一区二区三区| 在线视频日韩欧美| 国产一区二区精品在线观看| 亚洲综合欧美激情| 老司机精品视频在线| 国产一级做a爰片久久| 免费xxxx性欧美18vr| 三级在线视频观看| 先锋影音久久久| 日日摸天天爽天天爽视频| 性伦欧美刺激片在线观看| 欧美色图色综合| 日韩一级免费| 成人免费无码av| 日韩高清不卡在线| 国产精品久久久久久9999| 国产一区二区电影| 野战少妇38p| 2021中文字幕一区亚洲| 人妻精品久久久久中文字幕| 91看片淫黄大片一级| 熟女少妇内射日韩亚洲| 中文字幕一区二区三区乱码在线| 中文字幕天堂网| 久久精品亚洲乱码伦伦中文| 国产性猛交xx乱| 亚洲欧美日韩久久| 国产一级做a爰片在线看免费| 国产精品网站在线观看| 自拍偷拍第9页| 亚洲欧洲日本在线| 国产在线欧美在线| 1区2区3区精品视频| 国产中文字幕免费| 日本韩国欧美在线| av男人天堂av| 精品亚洲一区二区三区| 九九九伊在人线综合| www.久久久久| 日本性爱视频在线观看| 51久久精品夜色国产麻豆| 日本在线一区二区| 国产专区一区二区| 日韩精品网站| 老子影院午夜伦不卡大全| 久久久蜜桃一区二区人| 99热这里只有精品2| aa级大片欧美| 日本黄色小视频在线观看| 亚洲综合偷拍欧美一区色| www.com亚洲| 欧美老女人第四色| 视频二区在线| 久久国产精彩视频| 国产精品粉嫩| 97碰碰视频| 欧美激情偷拍自拍| 国产精品亚洲αv天堂无码| 国内精品伊人久久久久av影院 | 美女福利视频在线| 国产精品一区一区| 国产在线综合视频| 亚洲国产乱码最新视频| 国语对白做受69按摩| 日韩视频在线一区二区| 99视频在线观看地址| 68精品国产免费久久久久久婷婷| 国产精品第一国产精品| 97人人干人人| 久久国产成人精品| 青青草视频在线免费播放| 毛片基地黄久久久久久天堂| 精品人妻一区二区三区日产乱码卜| 亚洲日本在线a| 凹凸精品一区二区三区| 国产丝袜一区二区三区免费视频| 日本高清在线观看视频| 成人国产在线视频| 成人在线丰满少妇av| 亚洲色欲综合一区二区三区| 成人av影院在线| 欧美爱爱免费视频| 精品视频一区三区九区| 欧美在线一卡| 久久久久久久网站| 国产日韩一区二区三免费高清| 色中色综合成人| 久久精品国产清高在天天线| 亚洲欧美在线不卡| 偷拍亚洲欧洲综合| 五月婷婷六月丁香| 久久夜色精品国产欧美乱| av综合电影网站| 蜜桃久久精品乱码一区二区| 性欧美长视频| 醉酒壮男gay强迫野外xx| 婷婷成人综合网| 性做久久久久久久| 欧美多人乱p欧美4p久久| 欧美一级大片在线视频| 2021狠狠干| 国产高清在线精品| 久久久久亚洲av无码专区| 日韩精品资源二区在线| 特级毛片在线| 国产视频一区二区三区四区| 99精品小视频| 一卡二卡三卡四卡五卡| 亚洲综合视频在线观看| 深爱激情五月婷婷| 欧美理论电影在线播放| 国产劲爆久久| 免费日韩视频在线观看| 亚洲国产精品ⅴa在线观看| 中文字幕免费播放| 久久亚洲电影天堂| av不卡一区| 波多野结衣综合网| 久久综合久久久久88| 毛片毛片女人毛片毛片| 国产亚洲精品久久久久久777| 精品网站在线| 经典三级在线视频| 高清在线成人网| 日韩视频在线观看一区| 中文字幕久精品免费视频| 99精品视频在线免费播放| 在线观看亚洲视频啊啊啊啊| 激情综合亚洲精品| 国产在线观看免费视频今夜| 亚洲女人天堂视频| 91精品亚洲一区在线观看| 男人天堂成人网| 成人国产视频在线观看| 久久久久亚洲av成人片| 亚洲精品www久久久久久广东| 成人看片网站| 国产一级片91| 久久久综合激的五月天| 国产一区二区在线视频观看| 久久久久在线观看| 日韩电影免费网址| 亚洲欧洲国产视频| 在线视频欧美精品| 一区二区三区伦理| 六十路精品视频| 老司机午夜精品| 久久久久久少妇| 久久精品国产一区| 西瓜成人精品人成网站| 日本熟妇人妻中出| 亚洲午夜一区二区三区| 天堂а√在线8种子蜜桃视频| 国产日韩欧美在线看| 亚洲欧洲日本mm| 麻豆天美蜜桃91| 国产一区二区三区直播精品电影 | 国产精品91一区|