日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Qt事件处理

發(fā)布時間:2023/12/2 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Qt事件处理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Qt事件處理

Qt事件處理的五個層次

Qt 應用程序 事件處理 的五個層次,同時也是時間流程如下圖所示:

說明如下:

  • sendEvent()會把event直接發(fā)送給QCoreApplication的notify(),postEvent()把event追加到事件隊列中最終也要調用notify()。
  • notify()把事件分發(fā)給參數中的receiver,如果receiver安裝了eventFilter,那么event會發(fā)給定義這個事件過濾器的監(jiān)控者,如果這個event沒有被過濾,那么這個event會被傳給receiver的event()函數。
  • event()函數再把這個event傳給與其相應的事件處理函數(諸如keyPressEvent()之類的函數)。這些事件處理函數這才是真正響應event的函數,它們才是真正干活的,到這里算是處理完了。
  • 這個過程中,權限是由大到小的,不算sendEvent()和postEvent和事件循環(huán),notify具有最大控制權,因為它最先見到event,我們可以重寫notify()開始的這個處理鏈上的函數來響應event,從而進行相應的操作。
  • 整個流程中,只有postEvent()和最后的事件處理函數是void類型,其它函數都是bool型。
  • QT 自定義事件

    Qt自定義事件的實現也是按照五個層次的原理實現的

    1 1 #include <QtGui/QApplication> 2 2 #include <QCoreApplication> 3 3 #include <QEvent> 4 4 #include <QObject> 5 5 #include <QDebug> 6 6 7 7 //聲明、定義、注冊自定義事件類型,事件ID為自定義事件ID起點QEvent::User +100=1100 8 8 static const QEvent::Type MyEventType = (QEvent::Type)QEvent::registerEventType(QEvent::User+100); 9 9 10 10 //長官 11 11 class MyEvent: public QEvent 12 12 { 13 13 public: 14 14 MyEvent(Type myeventtype):QEvent(myeventtype){} 15 15 }; 16 16 17 17 //信使 18 18 class MySender: public QCoreApplication 19 19 { 20 20 public: 21 21 MySender(int argc,char *argv[]):QCoreApplication(argc,argv){} 22 22 23 23 public: 24 24 bool notify(QObject *receiver, QEvent *event); 25 25 26 26 }; 27 27 28 28 bool MySender::notify(QObject *receiver, QEvent *event) 29 29 { 30 30 if(event->type() == MyEventType) 31 31 { 32 32 qDebug()<<"MyEventType is coming!"; 33 33 //return true; 34 34 /*這里不能return true,因為重寫notify就是在事件被向下傳遞之前截住它, 35 35 隨便搞它,搞完了還得給QCoreApplication::notify向下傳遞,除非在mySender.notify 36 36 實現了事件向下傳遞的那一套。直接返回的話myArmy就收不到這個事件,因為執(zhí)行完這個 37 37 mySender.notify的return true后,事件傳遞被人為的在半截終止了 38 38 (見Qt事件處理的五個層次http://blog.csdn.net/michealtx/article/details/6865891 ) 39 39 ,下面的myArmy的安裝的過濾器和它自己的event都不會收到這個事件,更甭提最后干活 40 40 的myEventHandler了。所以在主函數中執(zhí)行完mySender.sendEvent把myEvent 41 41 交給mySender.notify這個敗家子兒后,就執(zhí)行mySender.exec進入其它事件的循環(huán)了。這就是 42 42 問題http://topic.csdn.net/u/20111012/19/78036d16-c163-40f9-a05c-3b7d6f4e9043.html 43 43 出現的原因。感謝1+1=2大牛!非常感謝! 44 44 */ 45 45 } 46 46 return QCoreApplication::notify(receiver,event); 47 47 } 48 48 49 49 //軍隊 50 50 class MyArmy: public QObject 51 51 { 52 52 public: 53 53 void MyEventHandler(QEvent *event);//自定義事件函數 54 54 bool event(QEvent *event); 55 55 }; 56 56 57 57 void MyArmy::MyEventHandler(QEvent *event) 58 58 { 59 59 qDebug()<<"The event is being handled!"; 60 60 event->accept(); 61 61 } 62 62 63 63 bool MyArmy::event(QEvent *event) 64 64 { 65 65 if(event->type() == MyEventType) 66 66 { 67 67 qDebug()<<"event() is dispathing MyEvent"; 68 68 MyEventHandler(event);//調用事件處理函數 69 69 if((MyEvent*)event->isAccepted()) 70 70 { 71 71 qDebug()<<"The event has been handled!"; 72 72 return true; 73 73 } 74 74 } 75 75 return QObject::event(event); 76 76 } 77 77 78 78 //監(jiān)控者 79 79 class MyWatcher: public QObject 80 80 { 81 81 public: 82 82 bool eventFilter(QObject *watched, QEvent *event); 83 83 }; 84 84 85 85 bool MyWatcher::eventFilter(QObject *watched, QEvent *event) 86 86 { 87 87 if(event->type() == MyEventType) 88 88 { 89 89 qDebug()<<"I don't wanna filter MyEventType"; 90 90 return false; 91 91 } 92 92 return QObject::eventFilter(watched,event); 93 93 } 94 94 95 95 96 96 int main(int argc, char *argv[]) 97 97 { 98 98 //QCoreApplication a(argc, argv); 99 99 MySender mySender(argc,argv); 100 100 101 101 MyArmy myArmy; 102 102 MyWatcher myWatcher; 103 103 myArmy.installEventFilter(&myWatcher);//安裝事件過濾器 104 104 105 105 MyEvent myEvent(MyEventType); 106 106 mySender.sendEvent(&myArmy,&myEvent); 107 107 return mySender.exec(); 108 108 } CustomEvent 示例代碼

    要注意:

    當使用sendEvent時,你的事件要在棧上建立,sendEvent會直接調用notify把事件傳遞給士兵,不走事件隊列;而用postEvent時,你的事件要在堆上建立,即要用new來創(chuàng)建,postEvent會把你的事件追加進事件隊列

    ?

    ?

    轉載于:https://www.cnblogs.com/Yu-900914/p/10036116.html

    總結

    以上是生活随笔為你收集整理的Qt事件处理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 国产精品第72页 | 理论片高清免费理伦片 | 丁香免费视频 | 超级碰在线观看 | 欧美高清免费 | 国产精品久久久久久亚洲毛片 | 正在播放adn156松下纱荣子 | 国产又爽又黄视频 | 国产一卡二卡三卡 | 在线观看视频一区二区 | 91免费精品视频 | 亚洲精品天堂网 | 国内精品在线观看视频 | 高清不卡av | 美女的奶胸大爽爽大片 | 国产又粗又硬又长又爽的演员 | 人人爽在线| 少妇免费看 | 成人黄色免费观看 | 竹菊影视一区二区三区 | 国产精品无遮挡 | 爱草视频| 麻豆国产一区二区三区 | 国产3p露脸普通话对白 | 日日日干 | 欧美日韩免费 | 污污视频在线免费看 | 国产露脸无套对白在线播放 | 快色污| 国产精品精品国产色婷婷 | 国产裸体无遮挡 | 国产女同视频 | 国产精品www在线观看 | 午夜性刺激免费视频 | 人人超碰人人 | 男生舔女生胸 | 欧美日韩人妻精品一区二区 | 男女一级黄色 | 美女福利一区 | 日韩一区二区三区网站 | 久99久视频 | 国产91网| 日操干 | japanese国产| 精品毛片在线观看 | 欧美一级大片在线观看 | 久久免费视频1 | 精品久久综合 | 亚洲国产精品尤物yw在线观看 | 国产精品福利导航 | 波多野吉衣久久 | 欧美久久久久久久久久久 | 国产日本欧美一区二区 | 国产精品亚洲一区二区三区在线观看 | 日韩欧美国产电影 | 激情久久免费视频 | 九草网| 少妇太爽了太深了太硬了 | 精品乱人伦一区二区三区 | 非洲黑妞xxxxhd精品 | 国产精品无码一区二区三区在线看 | 深夜视频在线播放 | 日韩极品在线观看 | 免费a在线观看 | www.黄色网 | 91官网视频 | 伊人黄| 亚洲色图25p | 天堂中文网在线 | 91精品视频免费在线观看 | www国产www| 欧美成人午夜影院 | 伊人超碰 | 在线视频这里只有精品 | 日本黄色xxxxx | 极品销魂美女一区二区三区 | 久久久久久久久久久影院 | 国产欧美精品一区二区三区app | 亚洲精品一级二级 | 免费超碰在线 | 观看免费av | 五月天综合视频 | 日韩白浆| 老熟妇精品一区二区三区 | 一区二区不卡 | 女女互磨互喷水高潮les呻吟 | 日韩素人 | 亚洲女优在线 | www.中文字幕 | sm在线观看 | 亚洲精品永久免费 | 动漫av一区二区三区 | 黄色片视频播放 | 97神马影院| 亚洲天堂2014 | 日韩欧美在线视频观看 | 亚洲最新 | 日本强好片久久久久久aaa | 香蕉网站在线观看 |