5.QT事件處理機制--Apple的學習筆記

一,前言

最近做了關于QT界面窗口的刻意練習,推薦自己制作小工程則直接創(chuàng)建ui建立一個個窗口。若工程中ui多變,則考慮使用自動布局。而我之前還學習過QT繪圖相關,比如paintevent重繪等。那么我今天要復習下,并且QT的事件機制再系統(tǒng)的學習下。便于做出更靈活更高級的界面處理功能。

二,QT事件處理機制

直接看QT的Help,搜索Event Class可以看到QT支持很多事件,點擊The Event System可以了解其機制。并且網(wǎng)上也很多介紹資料。反正我都看了,之后我發(fā)現(xiàn)和我之前學習的littlevgl源碼中的GUI引擎是一個處理機制。
return a.exec();就是啟動了線程,進行事件掃描,一旦有對象事件發(fā)生,則會通過Event類傳給此對象。再仔細分析就是事件發(fā)生后保存到消息隊列,通過周期掃描消息對象,進行事件通知。這里等于是有一點點的延遲,update()就是將此paintEvent加入消息隊列,等待處理就是這樣的應用。信號和槽也是這樣的異步事件處理機制。另外一個是repaint立即重繪,則會直接調(diào)用paintEvent更新界面。所以paintEvent中可以加入update()但是不能加入repaint(),這會導致歸遞死循環(huán)。

三,QT事件傳遞順序

事件傳遞順序可以理解為也是層層歸遞的,先進入widget容器過濾事件,然后一層層進入到最上層的widget通知事件,并且調(diào)用事件處理的回調(diào)函數(shù)。最終再一層層從頂層向底層的widget傳遞事件。簡單來說是一個爬上到下山的過程。而一層層的控件,在最頂層的就是可以想象為在山頂,在最下方的容器類就是山底。
參考官網(wǎng)help,比如新建一個Widget類,再創(chuàng)建一個繼承QLineEdit的自定義類。在自定義的QLineEdit框中輸入一個字符。最后事件傳遞的方法請參考下圖。


image.png

四,總結(jié)

之前的基于單片機的GUI引擎源碼看來沒有白學,發(fā)現(xiàn)原理都是相同的。沒想到QT GUI引擎也是類似的設計。這樣的一通百通的可遷移經(jīng)驗就是靠平時不斷跨界累積的。
這讓我想到我所在的汽車零部件行業(yè),adaptive autosar用的通信機制DDS和機器人ros中的DDS一樣。再想想現(xiàn)在汽車行業(yè)也要基于領域驅(qū)動設計(ddd)來定義微服務,這個是在向互聯(lián)網(wǎng)靠攏。可能這是互聯(lián)網(wǎng)造車新勢力帶來的概念。畢竟已經(jīng)到了軟件定義汽車時代了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 1、信號和槽 Qt中的事件處理機制叫“信號和槽”,signal和slot。模型:對象a中有一個信號signal:X...
    行走行囊閱讀 513評論 0 0
  • 簡介 這里簡單介紹Qt的一些核心機制,具體參見Qt文檔。 主要包含內(nèi)容: Qt的信號和槽,以及事件機制 Qt Ob...
    QuietHeart閱讀 1,715評論 0 3
  • 為什么在頭文件中有的是使用前置聲明,而有的是包含頭文件? 如下代碼: 前置聲明(forward declarati...
    Joe_HUST閱讀 1,451評論 0 6
  • QObject三大核心功能:信號與槽,內(nèi)存管理,事件處理 總覽 1、誰來產(chǎn)生事件: 最容易想到的是我們的輸入設備,...
    上官宏竹閱讀 3,146評論 2 4
  • 與界面編程緊密相關的就是事件處理機制,當用戶在程序界面上執(zhí)行各種操作時,應用程序必須為用戶動作提供響應動作,這種響...
    GB_speak閱讀 2,378評論 0 3

友情鏈接更多精彩內(nèi)容