QT信号与槽(自定义带参数的信号)
關于QT信號與槽的問題其實每個初學QT的人都會遇到,當時我需要做一個帶界面的demo,在信號和槽的問題上,我需要的想法是讓槽可以有參數的進行操作,但是系統內置的clicked()信號是不含參數的,這對當時根本沒接觸過QT的我來說就很沒頭緒,無奈之下只好選擇了使用全局變量這個下下策,還好我的demo代碼量呀不是很大。我當時是借了一本QT CREATOR快速入門,雖說是好書,但是也很難靜得下心來看,于是選擇在網上翻閱資料將信號與槽這一部分內容給初步整理了下,得出自己的見解。
QT的作用是做出一個可視化的交互見面,這一點跟中學學的VB很像,當然兩者的能力就天差地別了。在QT中,通過控件來實現需求。這里我用最簡單的按鈕QPushButton和輸入框QLineEdit作演示,希望這篇博客能讓你對信號和槽有個印象。
為了盡量簡潔的說明信號問題,在創建QT項目時選擇基類為Widget,不勾選界面。
首先,在QT幫助文檔里是有內置的SIGNAL和SLOT的,在SIGNAL中有一個clicked信號,默認參數bool。這里我們需要新建一個按鈕,同時定義一個槽函數(槽函數即接收到信號時所做出的行為)。
因為需要用到類QPushbutton,故需包含相應的頭文件,這邊著重講解connect函數。
connect函數用于將信號的發出者和信號的處理者聯系起來,第一第三個參數分別為發出者和接收者,注意為指針類型,this為對象的指針,這一點和C++語法一樣。第二參數為信號,第四參數為槽函數,均可自定義。這里clicked為系統內置信號,在b2接收到clicked(鼠標點擊信號)后,對象(此處為主窗口)作出MySlot反應,MySlot為我定義的一個槽函數。也就是說,此時我按下b2按鈕,窗口會運行MySlot函數。
在理解以上內容的基礎上,下面將介紹重點,即自定義信號,編寫帶函數參數的槽函數:
上述為在頭文件中,注意在定義信號時要在前面加上signals ,且信號和槽的返回值均為void,此時我定義了一個信號,它將傳遞一個QLineEdit*型參數和一個int型參數
void Signal::MySlot() {emit mySignal(edit,5); } void Signal::MyDel(QLineEdit *edit,int x) {edit->setText("The Num is "+QString::number(x)); }自定義槽函數MySlot(),此槽函數僅僅用于發送之前定義的帶參數的信號mySignal(),之前此槽函數與按鈕b2的clicked信號已經connect過,故點擊b2,將發送信號mySignal(edit,5);
connect(this,&Signal::mySignal,this,&Signal::MyDel);- 1
connet 此自定義的信號和槽函數MyDel(QLineEdit *edit,int x),接受到此信號是,操作MyDel,用于給edit設置文本屬性。
下面附上效果圖
總結
以上是生活随笔為你收集整理的QT信号与槽(自定义带参数的信号)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QgridLayout例子,在qlayo
- 下一篇: 领域驱动设计:浅析 VO、DTO、DO、