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

詳解 QT 源碼之 Qt 事件機制原理

移動開發(fā)
本文介紹的是 QT 源碼之 Qt 事件機制原理,解決在用Qt寫Gui程序的時候,出現(xiàn)的問題,先來看本文.

QT 源碼之 Qt 事件機制原理是本文要介紹的內(nèi)容,在用Qt寫Gui程序的時候,在main函數(shù)里面最后依據(jù)都是app.exec();很多書上對這句的解釋是,使 Qt 程序進入消息循環(huán)。下面我們就到exec()函數(shù)內(nèi)部,來看一下他的實現(xiàn)原理。
Let's go!
首先來到QTDIR\src\corelib\kernel\qcoreapplication.cpp

  1. int QCoreApplication::exec()  
  2. {  
  3.     if (!QCoreApplicationPrivate::checkInstance("exec"))  
  4.         return -1;  
  5.     //獲取線程數(shù)據(jù)  
  6.     QThreadData *threadData = self->d_func()->threadData;  
  7.     //判斷是否在主線程創(chuàng)建  
  8.     if (threadData != QThreadData::current()) {  
  9.         qWarning("%s::exec: Must be called from the main thread", self->metaObject()->className());  
  10.         return -1;  
  11.     }  
  12.     //判斷eventLoop是否已經(jīng)創(chuàng)建  
  13.     if (!threadData->eventLoops.isEmpty()) {  
  14.         qWarning("QCoreApplication::exec: The event loop is already running");  
  15.         return -1;  
  16.     }  
  17.     threadData->quitNow = false;  
  18.     QEventLoop eventLoop;  
  19.     self->d_func()->in_exec = true;  
  20.     //創(chuàng)建eventLoop  
  21.     int returnCode = eventLoop.exec();  
  22.     threadData->quitNow = false;  
  23.     if (self) {  
  24.         self->d_func()->in_exec = false;  
  25.         //退出程序  
  26.         emit self->aboutToQuit();  
  27.         sendPostedEvents(0, QEvent::DeferredDelete);  
  28.     }  
  29.     return returnCode;  
  30. }  
  31. 再來到qeventloop.cpp中。  
  32. int QEventLoop::exec(ProcessEventsFlags flags)  
  33. {  
  34.     Q_D(QEventLoop);  
  35.     if (d->threadData->quitNow)  
  36.         return -1;  
  37.     //已經(jīng)調(diào)用過exec了。  
  38.     if (d->inExec) {  
  39.         qWarning("QEventLoop::exec: instance %p has already called exec()", this);  
  40.         return -1;  
  41.     }  
  42.     d->inExec = true;  
  43.     d->exit = false;  
  44.     ++d->threadData->loopLevel;  
  45.     //將事件類對象壓入線程結(jié)構(gòu)體中  
  46.     d->threadData->eventLoops.push(this);  
  47.     // remove posted quit events when entering a new event loop  
  48.     // 這句不用翻譯了把!  
  49.     if (qApp->thread() == thread())  
  50.         QCoreApplication::removePostedEvents(qApp, QEvent::Quit);  
  51. #if defined(QT_NO_EXCEPTIONS)  
  52.     while (!d->exit)  
  53.         //這里才是關鍵,我們還要繼續(xù)跟蹤進去。  
  54.         processEvents(flags | WaitForMoreEvents);  
  55. #else  
  56.     try {  
  57.         while (!d->exit)  
  58.             processEvents(flags | WaitForMoreEvents);  
  59.     } catch (...) {  
  60.         //如果使用了EXCEPTION,則繼續(xù)對下一條時間進行處理。  
  61.         qWarning("Qt has caught an exception thrown from an event handler. Throwing\n"  
  62.                  "exceptions from an event handler is not supported in Qt. You must\n"  
  63.                  "reimplement QApplication::notify() and catch all exceptions there.\n");  
  64.         throw;  
  65.     }  
  66. #endif  
  67.     //退出eventloop前,將時間對象從線程結(jié)構(gòu)中取出。  
  68.     QEventLoop *eventLoop = d->threadData->eventLoops.pop();  
  69.     Q_ASSERT_X(eventLoop == this, "QEventLoop::exec()", "internal error");  
  70.     Q_UNUSED(eventLoop); // --release warning  
  71.  
  72.     d->inExec = false;  
  73.     --d->threadData->loopLevel;  
  74.     //退出事件循環(huán)。  
  75.     return d->returnCode;  
  76. }  
  77.  
  78. 來到了processEvents函數(shù):  
  79. bool QEventLoop::processEvents(ProcessEventsFlags flags)  
  80. {  
  81.     Q_D(QEventLoop);  
  82.     //判斷事件分派器是否為空。  
  83.     if (!d->threadData->eventDispatcher)  
  84.         return false;  
  85.     if (flags & DeferredDeletion)  
  86.         QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete);  
  87.     //調(diào)用不同平臺下的事件分派器來處理事件。  
  88.     return d->threadData->eventDispatcher->processEvents(flags);  
  89. }  
  90. processEvents是在QAbstractEventDispatcher類中定義的純虛方法。在QEventDispatcherWin32類有processEvents的實現(xiàn)。  
  91. bool QEventDispatcherWin32::processEvents(QEventLoop::ProcessEventsFlags flags)  
  92. {  
  93.     Q_D(QEventDispatcherWin32);  
  94.     //內(nèi)部數(shù)據(jù)創(chuàng)建。registerClass注冊窗口類,createwindow創(chuàng)建窗體。  
  95.     //注冊socket notifiers,啟動所有的normal timers  
  96.     if (!d->internalHwnd)  
  97.         createInternalHwnd();  
  98.     d->interrupt = false;  
  99.     emit awake();  
  100.  
  101.     bool canWait;  
  102.     bool retVal = false;  
  103.     do {  
  104.         QCoreApplicationPrivate::sendPostedEvents(0, 0, d->threadData);  
  105.         DWORD waitRet = 0;  
  106.         HANDLE pHandles[MAXIMUM_WAIT_OBJECTS - 1];  
  107.         QVarLengthArray<MSG> processedTimers;  
  108.         while (!d->interrupt) {  
  109.             DWORD nCount = d->winEventNotifierList.count();  
  110.             Q_ASSERT(nCount < MAXIMUM_WAIT_OBJECTS - 1);  
  111.             MSG msg;  
  112.             bool haveMessage;  
  113.             if (!(flags & QEventLoop::ExcludeUserInputEvents) && !d->queuedUserInputEvents.isEmpty()) {  
  114.                 // process queued user input events處理用戶輸入事件,放入隊列中。  
  115.                 haveMessage = true;  
  116.                 msg = d->queuedUserInputEvents.takeFirst();  
  117.             } else if(!(flags & QEventLoop::ExcludeSocketNotifiers) && !d->queuedSocketEvents.isEmpty()) {  
  118.                 // process queued socket events  處理socket事件,放入隊列中。  
  119.                 haveMessage = true;  
  120.                 msg = d->queuedSocketEvents.takeFirst();  
  121.             } else {  
  122.                 //從消息隊列中取消息,同PeekMessage  
  123.                 haveMessage = winPeekMessage(&msg, 0, 0, 0, PM_REMOVE);  
  124.                 if (haveMessage && (flags & QEventLoop::ExcludeUserInputEvents)  
  125.                     && ((msg.message >= WM_KEYFIRST  
  126.                          && msg.message <= WM_KEYLAST)  
  127.                         || (msg.message >= WM_MOUSEFIRST  
  128.                             && msg.message <= WM_MOUSELAST)  
  129.                         || msg.message == WM_MOUSEWHEEL)) {  
  130.                     // queue user input events for later processing  
  131.                     haveMessage = false;  
  132.                     d->queuedUserInputEvents.append(msg);  
  133.                 }  
  134.                 if (haveMessage && (flags & QEventLoop::ExcludeSocketNotifiers)  
  135.                     && (msg.message == WM_USER && msg.hwnd == d->internalHwnd)) {  
  136.                     // queue socket events for later processing  
  137.                     haveMessage = false;  
  138.                     d->queuedSocketEvents.append(msg);  
  139.                 }  
  140.             }  
  141.             if (!haveMessage) {  
  142.                 // no message - check for signalled objects  
  143.                 for (int i=0; i<(int)nCount; i++)  
  144.                     pHandles[i] = d->winEventNotifierList.at(i)->handle();  
  145.                 //注冊signal--slot。  
  146.                 waitRet = MsgWaitForMultipleObjectsEx(nCount, pHandles, 0, QS_ALLINPUT, MWMO_ALERTABLE);  
  147.                 if ((haveMessage = (waitRet == WAIT_OBJECT_0 + nCount))) {  
  148.                     // a new message has arrived, process it  
  149.                     continue;  
  150.                 }  
  151.             }  
  152.             //事件隊列中有事件需要處理。  
  153.             if (haveMessage) {   
  154.                 //處理timer事件  
  155.                 if (msg.message == WM_TIMER) {  
  156.                     // avoid live-lock by keeping track of the timers we've already sent  
  157.                     bool found = false;  
  158.                     for (int i = 0; !found && i < processedTimers.count(); ++i) {  
  159.                         const MSG processed = processedTimers.constData()[i];  
  160.                         found = (processed.wParam == msg.wParam && processed.hwnd == msg.hwnd && processed.lParam == msg.lParam);  
  161.                     }  
  162.                     if (found)  
  163.                         continue;  
  164.                     processedTimers.append(msg);  
  165.                 } else if (msg.message == WM_QUIT) {  
  166.                     if (QCoreApplication::instance())  
  167.                         QCoreApplication::instance()->quit();  
  168.                     return false;  
  169.                 }  
  170.                 //消息分發(fā)處理。  
  171.                 if (!filterEvent(&msg)) {  
  172.                     TranslateMessage(&msg);  
  173.                     QT_WA({  
  174.                         DispatchMessage(&msg);  
  175.                     } , {  
  176.                         DispatchMessageA(&msg);  
  177.                     });  
  178.                 }  
  179.             } else if (waitRet >= WAIT_OBJECT_0 && waitRet < WAIT_OBJECT_0 + nCount) {  
  180.                 //處理signal--slot  
  181.                 d->activateEventNotifier(d->winEventNotifierList.at(waitRet - WAIT_OBJECT_0));  
  182.             } else {  
  183.                 // nothing todo so break  
  184.                 break;  
  185.             }  
  186.             retVal = true;  
  187.         }  
  188.         // still nothing - wait for message or signalled objects  
  189.         QThreadData *ddata = d->threadData;  
  190.         canWait = (!retVal  
  191.                    && data->canWait  
  192.                    && !d->interrupt  
  193.                    && (flags & QEventLoop::WaitForMoreEvents));  
  194.         if (canWait) {  
  195.             DWORD nCount = d->winEventNotifierList.count();  
  196.             Q_ASSERT(nCount < MAXIMUM_WAIT_OBJECTS - 1);  
  197.             for (int i=0; i<(int)nCount; i++)  
  198.                 pHandles[i] = d->winEventNotifierList.at(i)->handle();  
  199.             emit aboutToBlock();  
  200.             waitRet = MsgWaitForMultipleObjectsEx(nCount, pHandles, INFINITE, QS_ALLINPUT, MWMO_ALERTABLE);  
  201.             emit awake();  
  202.             if (waitRet >= WAIT_OBJECT_0 && waitRet < WAIT_OBJECT_0 + nCount) {  
  203.                 d->activateEventNotifier(d->winEventNotifierList.at(waitRet - WAIT_OBJECT_0));  
  204.                 retVal = true;  
  205.             }  
  206.         }  
  207.     } while (canWait);  
  208.     return retVal;  

小結(jié):關于詳解 QT 源碼之 Qt 事件機制原理的內(nèi)容介紹完了,基本屬于代碼實現(xiàn)的內(nèi)容,最后希望本文對你有幫助!

責任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關推薦

2011-06-23 14:40:13

Qt 信號

2011-06-23 13:38:27

QT 元對象 信號

2011-06-23 11:16:39

Qt Excel

2011-07-01 14:14:34

Qt 事件

2011-07-01 14:20:59

Qt 事件

2011-06-23 15:32:05

Qt Windows消息

2011-06-23 15:10:39

Qt 窗體

2011-06-28 16:18:24

Qt QObject

2011-06-23 13:25:42

QT 源碼 窗口

2011-07-05 18:32:52

QT 信號 機制

2011-07-05 18:40:19

QT 信號 機制

2011-06-29 16:14:59

Qt 事件 過濾器

2011-06-29 17:20:20

Qt 內(nèi)存 QOBJECT

2021-09-01 06:48:16

AndroidGlide緩存

2021-08-17 13:41:11

AndroidView事件

2011-06-23 14:27:48

QT QLibrary 動態(tài)庫

2011-08-29 14:59:26

QtEvent事件

2011-07-04 14:50:49

QT Event 事件

2011-07-01 15:04:49

Qt 內(nèi)省

2011-06-24 17:38:09

Qt 坐標 事件
點贊
收藏

51CTO技術棧公眾號

国产a√精品区二区三区四区| 一区二区视频在线播放| 99精品人妻少妇一区二区| 欧美一区,二区| 久久精品成人| 久久人人爽人人爽人人片亚洲| 国产伦理在线观看| 麻豆精品蜜桃| 亚洲成人综合视频| 亚洲国产精品一区二区第四页av| 精品国产伦一区二区三| 久色成人在线| 亚洲丁香婷深爱综合| 熟女人妇 成熟妇女系列视频| 超碰免费在线播放| 久久综合给合久久狠狠狠97色69| 亚洲va电影大全| 日本熟女毛茸茸| 日本在线中文字幕一区| 欧美乱熟臀69xxxxxx| 国产主播自拍av| 黄色在线播放网站| 韩国一区二区三区| 欧美一级大片在线观看| 中国av免费看| 成人精品视频在线观看| 色偷偷成人一区二区三区91| 日本香蕉视频在线观看| 日本中文字幕在线2020| 久久精品99久久久| 欧美一区二区三区免费视| 欧美黄色免费看| 99久久亚洲精品| 亚洲少妇激情视频| 中文字幕5566| 久久综合五月婷婷| 日韩精品一区二区三区中文不卡 | 欧洲美女和动交zoz0z| 蜜桃视频在线免费| 99久久精品国产网站| 成人黄色片视频网站| 国产三级伦理片| 精品亚洲porn| 91精品视频在线播放| 亚洲视频久久久| 日产欧产美韩系列久久99| 欧洲午夜精品久久久| 国产又黄又粗又爽| 国产精品一二| 热久久这里只有精品| 国产一级精品视频| 亚洲专区在线| 欧洲美女免费图片一区| 亚洲欧美偷拍视频| 久久成人亚洲| 国产成人精品999| xxxx日本黄色| 综合色就爱涩涩涩综合婷婷| 国产视频在线一区二区| 国产精品1000部啪视频| 四虎5151久久欧美毛片| 日韩av在线最新| 成都免费高清电影| 欧洲视频一区| 精品国产一区二区三区久久| 久久av红桃一区二区禁漫| 亚洲欧美偷拍自拍| 欧美美最猛性xxxxxx| 久久久99精品| 亚洲在线观看| 国产精品欧美风情| 国产又粗又猛又爽又黄91| 国产一区在线视频| 国产精品久久久久免费| 少妇精品高潮欲妇又嫩中文字幕| 99国产欧美久久久精品| 日本免费高清一区二区| 免费的黄网站在线观看| 亚洲综合久久av| 色综合久久久久久久久五月| 91美女视频在线| 亚洲最快最全在线视频| 内射国产内射夫妻免费频道| 成人免费观看视频大全| 一区二区国产视频| 大j8黑人w巨大888a片| 在线成人视屏 | 亚洲国产人成综合网站| 国产精品动漫网站| 国产一区精品二区| 日韩精品在线免费播放| 精品视频第一页| 狠色狠色综合久久| 国产精品精品一区二区三区午夜版 | 香蕉视频网站入口| 精品国产第一国产综合精品| 91国产成人在线| 久久久九九九热| 亚州精品视频| 久久香蕉频线观| 天天爽夜夜爽夜夜爽精品| 日本不卡一区二区三区| 国产精品一区二区a| av每日在线更新| 亚洲成av人片一区二区梦乃| 污片在线免费看| 国产一区福利| 久久亚洲精品一区| 久久精品国产成人av| 国产麻豆日韩欧美久久| 欧美极品视频一区二区三区| www免费在线观看| 色中色一区二区| 佐佐木明希电影| 欧美gay男男猛男无套| 97avcom| 少妇一级淫片免费放中国| 久久99久久精品欧美| 麻豆成人在线播放| av人人综合网| 欧美性猛交一区二区三区精品| 野战少妇38p| 天天做天天爱天天爽综合网| 国产mv久久久| 亚洲色欧美另类| 亚洲在线成人精品| 国产精品igao网网址不卡| 精品视频久久| 国产精品69av| 四虎影视2018在线播放alocalhost| youjizz国产精品| 97在线免费视频观看| 超碰在线网站| 欧美一区二区三区四区久久| 69xxx免费| 91精品久久久久久久久久不卡| 日本视频久久久| 五月天婷婷在线播放| 一区二区高清免费观看影视大全| 亚洲一区日韩精品| 精品国产精品久久一区免费式| 69久久夜色精品国产69| 免费av一级片| 亚洲国产成人tv| 亚洲成人精品在线播放| 国产精品扒开腿做爽爽爽软件| 亚洲自拍av在线| 在线不卡日本v二区707| 日韩三级电影网址| 九九热精彩视频| 国产成人精品免费一区二区| 人妻无码一区二区三区四区| aiai久久| 2020久久国产精品| 国模吧精品人体gogo| 欧美午夜精品一区| 乱老熟女一区二区三区| 国产综合久久久久久久久久久久| 精品少妇人妻av一区二区| 国产一区二区av在线| 欧美黄色免费网站| 日本黄色中文字幕| 日本一区二区高清| 日韩精品视频在线观看视频| 欧美与亚洲与日本直播| 一本色道久久88综合日韩精品| 国产情侣呻吟对白高潮| 成人激情黄色小说| 久久久久久久中文| 国产精品免费99久久久| 国产精品久久久久久久久久久久久| xxxxx日韩| 欧美一区二区三区白人| 一级免费在线观看| 国产麻豆视频一区| 99久久国产综合精品五月天喷水| 婷婷成人在线| 国产欧美日韩精品专区| 日韩精品卡一| 亚洲免费小视频| 国产精品久久久久久免费播放| 一区二区三区久久久| 丰满大乳奶做爰ⅹxx视频| 日本午夜精品一区二区三区电影| 黄瓜视频免费观看在线观看www| 99re8这里有精品热视频免费| 91黑丝高跟在线| 五月天婷婷在线视频| 精品捆绑美女sm三区| 黄色污污网站在线观看| 亚洲免费观看高清完整版在线观看 | 日韩三级一区二区| 中文字幕在线观看一区| 久久久久亚洲AV成人网人人小说| 日韩激情一二三区| 精品欧美日韩| 日韩精品第二页| 久久久中精品2020中文| av基地在线| 亚洲成成品网站| 一级特黄特色的免费大片视频| 亚洲国产精品天堂| 激情高潮到大叫狂喷水| 99久久久久免费精品国产| 欧美激情第3页| 国产精品美女久久久| 色中文字幕在线观看| 国产a久久精品一区二区三区| 97夜夜澡人人双人人人喊| 日本免费一区二区三区四区| 日韩电影第一页| 国产v在线观看| 欧美在线免费观看亚洲| 亚洲高潮女人毛茸茸| 成人性生交大片免费看中文| www.夜夜爽| 日日摸夜夜添夜夜添亚洲女人| 免费网站永久免费观看| 婷婷伊人综合| 亚洲国产高清国产精品| 国产99亚洲| 狼狼综合久久久久综合网| 亚洲综合网狠久久| 亚洲字幕一区二区| 伊人久久综合网另类网站| 另类色图亚洲色图| av在线天堂播放| 亚洲精品中文字幕有码专区| 粉嫩小泬无遮挡久久久久久| 欧美电影一区二区三区| 亚洲一卡二卡在线观看| 在线观看中文字幕不卡| 麻豆成人免费视频| 一本大道综合伊人精品热热| 可以免费看的av毛片| 亚洲a一区二区| 欧美日韩中文视频| 久久网站最新地址| 精品国产av色一区二区深夜久久| 丁香婷婷综合五月| 无码人妻丰满熟妇啪啪网站| 国产福利一区在线| 少妇丰满尤物大尺度写真| 国产一区啦啦啦在线观看| 一级片黄色免费| 国产成人综合网| 91亚洲一线产区二线产区| 国产成人免费视频一区| 亚洲成a人无码| 99久久国产综合色|国产精品| 国产精品福利导航| 91蜜桃在线免费视频| 五月婷婷综合在线观看| 久久久久久电影| 日本一区二区视频在线播放| 中文字幕成人av| 蜜桃av.com| 一区二区三区中文免费| av女人的天堂| 欧美国产日韩一二三区| 殴美一级黄色片| 亚洲视频一区二区在线| 欧美日韩免费一区二区| 亚洲福利一区二区三区| 影音先锋在线国产| 欧美三级一区二区| 99国产成人精品| 日韩精品一区二区三区在线播放 | 亚洲视频视频在线| av在线三区| 久久99精品国产99久久6尤物| 91制片在线观看| 国产成人一区二区三区| 成人在线视频国产| 国产伦精品一区二区三区高清| 免费欧美一区| 中文字幕免费高| 国产一区二区三区的电影| 99草草国产熟女视频在线| 国产在线不卡一区| 91视频在线免费| 国产精品欧美一区二区三区| 日本青青草视频| 欧美性猛xxx| 国产女人高潮时对白| 日韩av在线电影网| 快射av在线播放一区| 97精品一区二区视频在线观看| 福利一区二区| 国产精品视频福利| 久久中文字幕av| 91好吊色国产欧美日韩在线| 国产在线播放一区二区三区| 亚洲精品女人久久久| 国产精品成人免费精品自在线观看| 日韩av男人天堂| 51精品久久久久久久蜜臀| 欧美日韩免费做爰大片| 美女999久久久精品视频| 在线免费黄色| 91国自产精品中文字幕亚洲| 亚洲热av色在线播放| 蜜桃av久久久亚洲精品| 欧美精品国产一区| 另类小说第一页| 99re成人精品视频| 91嫩草|国产丨精品入口| 日韩毛片精品高清免费| 国产免费美女视频| 高潮白浆女日韩av免费看| 欧美三级一区二区三区| 欧美一级片在线观看| 91视频在线观看| 日本久久久久亚洲中字幕| 国产精品tv| 人人妻人人澡人人爽欧美一区| 青青草伊人久久| 波多野结衣a v在线| 亚洲第一精品在线| 午夜精品久久久久久久91蜜桃| 日韩在线免费视频| 欧美xxx视频| 久久青青草原一区二区| 国产麻豆精品久久| 青青青免费在线| 丁香六月久久综合狠狠色| 三级av在线免费观看| 欧美色精品天天在线观看视频| 欧美少妇另类| 欧洲日韩成人av| 亚洲免费成人av在线| 免费无码不卡视频在线观看| 成人av资源站| 国产无遮挡又黄又爽又色| 精品久久久久香蕉网| 男人天堂亚洲天堂| 97久久精品午夜一区二区| 久久久久久久久国产一区| 精品亚洲视频在线| 成人av电影在线观看| 久久久精品人妻一区二区三区四| 欧美一区二区三区视频在线 | 欧美猛男男男激情videos| 玩弄中年熟妇正在播放| www.av亚洲| 91九色丨porny丨肉丝| 亚洲欧美成人网| 桃子视频成人app| 91嫩草国产在线观看| 综合视频在线| 无码人妻一区二区三区精品视频| 一区二区高清在线| 少妇精品高潮欲妇又嫩中文字幕 | 亚洲中文字幕无码一区二区三区| 国产精品主播直播| 日本三级网站在线观看| 亚洲精品理论电影| 欧美特黄aaaaaaaa大片| 视频一区国产精品| 国产一区二区三区黄视频 | 电影k8一区二区三区久久| 好吊色欧美一区二区三区视频 | av在线免费看片| 尤物视频一区二区| 天堂网av在线播放| 国产精品99久久久久久久久| 日韩一区三区| 97中文字幕在线观看| 日韩欧美aⅴ综合网站发布| 中文字幕在线播放| 亚洲最大的网站| 亚洲一区二区免费看| 亚洲高潮女人毛茸茸| 日韩精品在线一区二区| 在线高清av| 中文字幕一区二区三区四区五区六区| 国产麻豆精品久久一二三| 青青草成人av| 日韩视频免费看| 欧美久久精品| 亚洲黄色小视频在线观看| 亚洲一区二区三区四区在线免费观看 | 3d动漫一区二区三区| 中文乱码免费一区二区| 亚洲产国偷v产偷v自拍涩爱| 欧美一级淫片aaaaaaa视频| 91影院成人| 成人精品在线观看视频| 欧美日韩一区二区三区高清 | 国产精品一区二区性色av | 日韩夫妻性生活xx| 91亚洲一线产区二线产区| 欧美影院一区二区三区| 韩国日本一区| 亚洲欧美日韩精品久久久| 99视频在线精品| 国产精品特级毛片一区二区三区| 78m国产成人精品视频| 亚洲国产精品成人| www在线观看免费视频|