成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解關于Qt中Event事件處理流程

移動開發 iOS
Qt中Event處理流程是本文要介紹的內容,主要是來了解Event事件的處理。在Qt/Embedded中,鼠標事件來自于觸摸屏設備。

QtEvent處理流程是本文要介紹的內容,主要是來了解Event事件的處理。在Qt/Embedded中,鼠標事件來自于觸摸屏設備。在使用select讀取觸摸屏設備中的數據后(即采樣,壓力達到一定閾值),處理些采樣點后得到一個物理設備坐標點,然后用QCoreApplication的sendEvent活postEvent將其發送出去,于是Event的處理流程就開始了。

首先,QCoreApplication::notify將event直接傳遞給接受者。重新實現它,可以截取系統所有需要處理的事件。

其次,在使用notify通知接受者處理后,可以為application的實例qApp安裝一個event filter,它將處理應用程序范圍內的事件。

第三,event在經過application的處理后,到達QObject的event filter列表,為接收者者們安裝event filter,將只處理發給自己的各個事件。

第四,在經過上述處理后,event到達QObject的event函數。該函數處理發送給自己的event,如QWidget中它按照event類型分發給自己的各個event Handler,如MouseReleaseEvent,KeyPressEvent等。

***,是處理不同類型event的event handler。這也是經常使用的,它只處理自己的event。 

過程如下:

  1. bool QCoreApplication::notify (   
  2. QObject   
  3. * receiver, QEvent   
  4. * event   
  5. )  
  6. ->qApp  
  7. 的  
  8. event filters->object  
  9. 的  
  10. event filter->object  
  11. 的event()  
  12. 函數->object  
  13. 的各  
  14. event handler  
  15.  

在以上處理過程中,返回true表示中止事件的處理,返回false則繼續。

父子窗體傳遞關系:

對于構成parent-child關系的QWidget,事件將首先傳遞給child,在子窗體做出ignore后將繼續傳遞給父窗體,若是accept,將終止傳
遞。若我們想截獲發給父窗體容器中的各個子(孫)窗體的event,可以使用QObject::findChildren查找出child列表,為其安裝event filter。比如自己重載eventfilter函數,然后安裝它就行了。當然,也可以在繼承的子類的event handler中ignore后讓父窗體繼續處理,但這不是截獲。
 
注意:根據Qt文檔,安裝的event filter不支持另外一個線程中執行的object。

應用實例:
 
FileBrowser中包含有多個QPushButton和一個QFrame,QFrame包含一個QStackedWidget,后者包含一個QListView和一個QTreeView兩個widget(它們是)。Filebrowser實現了eventFilter,并在FileBrowser的構造函數中安裝它們:   

  1. this->installEventFilter(this);  
  2. listView->installEventFilter(this);//not work,why?  
  3. treeView->installEventFilter(this);//not work,why?  
  4. QList<QPushButton*> allButtons = this->findChildren<QPushButton *>();  
  5. foreach(QPushButton* button, allButtons)  
  6.  button->installEventFilter(this);  

運行結果如下:

  1. obj name1:FileBrowserListView, type: 8  
  2. event filter: pid=6273 tid=-1208457520  
  3. ListView::mouseReleaseEvent: pid=6273 tid=-1208457520 

問題:

前兩行為eventfilter中的輸出結果:表示截取到了發往ListView的事件(類型為8,FocusIn事件)。而第三行則是listView的event handler的輸出,它能夠處理mouse、release事件,但event filter并未捕獲到它,但可以捕獲到焦點的得失事件。輸出的線程號也是相同的。

為什么event filter不能捕獲兩個view上的鼠標點擊事件,但可以獲取其它事件如FocusIn與FocusOut呢?

其中輸出log的代碼是:

  1. #include<unistd.h>   
  2. //#include<sys/types.h> 
  3. #include <pthread.h> 
  4. ...  
  5.  fprintf(stderr, "ListView::mouseReleaseEvent: pid=%d tid=%d\n",::getpid(), (unsigned int)::pthread_self()/*::gettid()*/); 

小結:詳解關于QtEvent處理流程的內容介紹完了,希望通過本文的學習能對你有所幫助!

責任編輯:zhaolei 來源: 互聯網
相關推薦

2011-07-04 14:50:49

QT Event 事件

2011-06-23 14:05:32

Qt 事件機制

2011-06-29 16:14:59

Qt 事件 過濾器

2011-07-01 14:20:59

Qt 事件

2011-07-01 14:14:34

Qt 事件

2010-08-09 11:14:36

Flex事件處理

2021-02-06 10:27:45

C#函數參數

2015-11-06 13:59:01

JavaScript事件處理

2011-08-29 11:25:29

QTWebKit鼠標

2011-08-23 17:06:03

2011-06-28 13:38:15

Arm linux QT

2010-10-09 10:30:03

JS event

2017-01-11 18:44:43

React Nativ觸摸事件Android

2011-08-22 10:49:42

Cocos2d 開發CCLayerTouch事件

2011-07-04 14:38:43

QT Qevent

2011-06-14 11:48:38

Webkit QT

2010-01-05 10:29:43

.NET Framew

2009-10-27 11:39:03

VB.NET事件處理程

2011-06-24 09:13:30

QT SDL

2011-08-29 10:34:36

QTQWebKitJavaScript
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: www.亚洲精品| 亚洲精品一区二 | 欧美群妇大交群中文字幕 | www.97国产 | 久久精品国产一区二区电影 | 久久婷婷香蕉热狠狠综合 | 99久久国产免费 | 蜜臀91视频| 成人免费在线小视频 | 亚洲欧美日韩精品久久亚洲区 | www.一级片 | 国产成人一区二区 | 亚洲一区二区三区高清 | 国产高清精品一区二区三区 | 丁香五月网久久综合 | 人人九九精 | 久亚州在线播放 | 黄色av网站免费看 | 五月天婷婷激情 | 日韩成人 | 成在线人视频免费视频 | 国产视频第一页 | 成人av一区二区三区 | 国产精品久久久久久久久久久久久久 | 久久国产美女视频 | 亚洲欧美中文日韩在线v日本 | 97超碰人人 | 日韩免费视频一区二区 | 91精品国产综合久久香蕉麻豆 | 日韩成人av在线 | 91在线一区二区 | 欧美一区二区三区在线播放 | 日本在线视频一区二区 | 欧美日韩亚洲国产 | 在线免费毛片 | 免费久久久 | 日韩av在线一区二区三区 | 久久精品国产一区二区三区不卡 | 暴草美女| 欧美网址在线观看 | 麻豆久久久久 |