賀志朋
(蘇州健雄職業技術學院,江蘇 蘇州 215411)
淺析QT入門之信號與槽機制
賀志朋
(蘇州健雄職業技術學院,江蘇 蘇州 215411)
QT是一個跨平臺的C++ GUI應用構架,信號與槽機制是其核心機制。要精通QT編程的前提就是就對信號和槽有所了解。本文對QT里信號與槽機制最常見的三種應用方式做了分析,指出它們在應用中的不同之處,便于我們加深對QT的信號與槽機制的理解。
信號;槽;QT
1.1 信號
一個對象要發射某個信號,只有當此信號的內部狀態發生改變時才會被發射。同時能夠發射這個信號的對象必須是定義過這個信號的類及其派生類。當發射一個信號時,將立刻執行和此信號相關聯的槽,和調用一個正常函數一樣。任何 GUI 事件循環完全獨立于信號與槽機制之外。發射函數(emit)是等所有的槽返回以后才返回。 如果某個信號和多個槽相關聯,當發射這個信號時,將依次地去執行這些槽,但執行這些的順序將是不確定的、隨機的。在頭文件里進行信號的聲明的,當信號聲明區指出已進入了QT的signals關鍵字,自己的信號隨后即可被聲明。
1.2 槽
C++普通成員函數之一就是槽,可以正常調用槽,多種信號可以與槽相關聯是槽的唯一特殊性。當發射與槽關聯的信號時,就會調用該槽。槽能帶參數,但是屬于槽的參數不能缺省。槽屬于普通成員函數的一員,它們也有存取權限。是否能夠與其相關聯取決于槽的存取權限。槽函數也分為三種類型,即protected slots、public slots 和private slots。最后進行槽的聲明也是在頭文件中。
以單擊窗口上的一個按鈕要彈出一個對話框為例:
把新建QT項目的常規流程完成以后,如果想實現點擊按鈕彈出對話框的效果,可以先在頭文件的類聲明中進行槽聲明,見圖1,然后到源文件中進行糟定義,見圖2。最后在構造函數里進行信號與槽的鏈接,見圖3.
把新建QT項目的常規流程完成以后,可以先在設計視圖下選中按鈕進行相應的轉槽處理,見圖4,然后到自動生成的槽函數中進行槽定義即可。見圖2。.
把新建QT項目的常規流程完成以后,可以先在設計視圖下單擊設計器上方的“編輯信號與槽”圖標,進入部件的信號和槽的編輯模式再進行相應的操作即可,見圖5。
本文主要闡述了QT中信號與槽應用的三種方式,第一種方式需要進行槽聲明,定義槽的實現并把信號和槽進行關聯,這種方式稍顯繁瑣,但便于理解,適合初學者使用;第二種方式直接對部件進行轉槽處理,自動添加槽聲明、生成槽定義實現函數并自動進行信號與槽的鏈接,只需添加槽實現代碼即可,這種方式操作簡單,但不好理解其具體內涵,適合對QT有一定研究者使用;第三種方式是在設計器中進行,這個與手寫函數是一樣的,它用的也是自動關聯,也會自動添加槽聲明。通過這三種方式的比較,我們對QT的核心機制:信號與槽機制有一個整體把握,借此為對QT的進一步學習研究打下一個良好的基礎。
[1]霍亞飛.QT Creator 快速入門[M].4版.北京.北京航天航空大學出版社,2016 .
[2]AP Witkin.Space-scale filtering[C].In Proc.Of IJCAI, 1983:1019-1021.
[3]J Koenderink.The structure of image [J].Biological Cybern ation,1984,50(06):363-370.
[4]P Perona and J Malik.Scale-Space and edge detection using anisotropic diffusion [J].IEEE Trans.PAMI,1990,12(07):629-639.
10.16640/j.cnki.37-1222/t.2016.22.122