PyQt5学习笔记05----Qt Designer信号槽
先入一些信號槽的基本介紹:
? ? ? ? 信號和槽是一種高級接口,應用于對象之間的通信,它是 QT 的核心特性,也是 QT 區別于其它工具包的重要地方。它為高層次的事件處理自動生成所需要的附加代碼。在我們所熟知的很多 GUI 工具包中,窗口小部件 (widget) 都有一個回調函數用于響應它們能觸發的每個動作,這個回調函數通常是一個指向某個函數的指針。但是,在 QT 中信號和槽取代了這些凌亂的函數指針,使得我們編寫這些通信程序更為簡潔明了。? ? ? ? 所有從 QObject 或其子類 ( 例如 Qwidget) 派生的類都能夠包含信號和槽。當對象改變其狀態時,信號就由該對象發射 (emit) 出去,這就是對象所要做的全部事情,它不知道另一端是誰在接收這個信號。這就是真正的信息封裝,它確保對象被當作一個真正的軟件組件來使用。槽用于接收信號,但它們是普通的對象成員函數。一個槽并不知道是否有任何信號與自己相連接。而且,對象并不了解具體的通信機制。
? ? ? ? 你可以將很多信號與單個的槽進行連接,也可以將單個的信號與很多的槽進行連接,甚至于將一個信號與另外一個信號相連接也是可能的,這時無論第一個信號什么時候發射系統都將立刻發射第二個信號。總之,信號與槽構造了一個強大的部件編程機制。
? ? ? ? 說實話對于像我這樣的新手來說看著就蛋疼,想學會它沒辦法,我們還是簡化一下概念吧:
? ? ? ? 所有QObject類都可以使用信號槽,換句話來說繼承自pyqt中的類基本上都可以使用信號槽機制。當然非QObject也是可以通過其他一些辦法來使用信號槽的。
僅僅有了信號和槽是不行的,我們還需要了解:
? ? ? ? 信號(Signal)、槽(slot)、連接(connect)、動作事件(action)、發射(emit)、發送者、接受者等等一些列的知識。好吧,別搞的那么復雜行不行,我們還是學學該怎么用吧。
? ? ? ? 在Qt Designer中為我們提供了一些基本的信號槽方法,我們來看看:
? ? ? ? 點擊工具欄上的“編輯信號/槽”,進入信號槽編輯模式,我們可以直接在發送者(button)上按住鼠標左鍵不放,拖動到接收者(Form窗體)上。這樣就建立起了連接。
? ? ? ? ?接著,會彈出配置連接對話框。
? ? ? 左邊是發送者(按鈕)的信號(動作事件),右邊是接收者(窗體)的槽(動作事件)
? ? ? 如圖所示,我信號選擇的是clicked,槽選擇的是close
? ? ? ? 我們看一下編譯后生成的代碼:
self.quitButton.clicked.connect(Form.close)
? ? ? ? 實現的功能是:當按鈕點擊之后關閉窗體。
? ? ? ?流程:按鈕是信號發送者,當點擊按鈕之后會發送一個信號出去,通過這段代碼程序內部的通訊機制知道這個按鈕的點擊事情被連接到窗體的關閉事件上去了,然后通知接受者窗體,你該運行槽函數close了!
那么我們怎么能執行自己的“槽”呢?
[python]?view plaincopy
小提示:
? ? ? ? 槽其實就個函數(方法),Qt5中的槽函數不在限定必須是slot,可以是普通的函數、類的普通成員函數、lambda函數等。編譯期間就會檢查信號與槽是否存在!
? ? ? ? 信號的connect連接最好放在__init__析構函數里面,這樣只會聲明一次連接,如果在類方法(函數中)使用的話,要記得disconnect,否則connect會連接多次,導致程序異常。
? ? ? ? 信號槽函數不用加 (),否則可能會導致連接異常。
總結
以上是生活随笔為你收集整理的PyQt5学习笔记05----Qt Designer信号槽的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HDU5863 cjj's string
- 下一篇: 【C语言重点难点精讲】C语言中的重要符号