Qt中的訊號和槽

2021-07-13 22:22:47 字數 2068 閱讀 7934

訊號槽是qt中特有的概念。它使得程式設計師將不同的object繫結起來,而object物件間並不需要對相互了解。slots也是普通的c++方法,它們可以是virtual;可以被過載;可以使private、protected、public,可以像其它c++方法一樣有各種型別的引數,signals則無這些屬性。它們唯一的區別就是signal與slot是相互鏈結起來的,slot函式在每次signal函式被emit時會被呼叫。

宣告訊號,跟函式不一樣,不需要定義

signals:

void mysignal();

void mysignal(int x);

void mysignalparam(int x,int y);

在用到的地方傳送訊號(先建立了訊號與槽的連線,才能接受訊號)

emit mysignal();

宣告槽,slots有public等屬性,槽就相當於定義的乙個函式,在裡面實現某些功能。

public slots:

void myslot();

void myslot(int x);

void myslot(int x,int y);

連線訊號signal和槽函式slot:

connect(sender, signal(mysignal()), receiver, slot(myslot()));

sender和receiver是qobject物件的指標,signal和slot函式是不帶引數的函式名,實際上signal()和slot()巨集將他們的引數(signal和slot函式)轉換成相應的字串。

注意

1、乙個訊號可以連線到多個槽:

connect(sender, signal(mysignal(int)),receiver1, slot(myslot(int)));

connect(sender, signal(mysignal(int),receiver2, slot(myslot(int)));

當訊號發出後,槽函式都會被呼叫,但是呼叫的順序是隨機的,不確定的。

2、多個訊號可以連線到同乙個槽

connect(sender1 signal(mysignal1()), receiver, slot(myslot()));

connect(sender2, signal(mysignal2()),receiver, slot(myslot()));

任何乙個訊號發出,槽函式都會執行。

3、乙個訊號可以和另乙個訊號相連

connect(sender, signal(mysignal1()),

this, signal(mysignal2()));

第乙個訊號發出後,第二個訊號也同時傳送。除此之外,訊號與訊號的連線和訊號與槽連線相同。

4、連線可以被刪除

disconnect(sender, signal(mysignal()),receiver, slot(myslot()));

這個函式很少使用,因為當乙個物件被刪除後,qt自動刪除這個物件的所有連線。

5、引數設定

訊號和槽函式必須有著相同的引數型別及順序,這樣訊號和槽函式才能成功連線:

connect(sender, signal(mysignal(int, const qstring &)),receiver, slot(myslot(int, const qstring &)));

如果訊號裡的引數個數多於槽函式的引數,多餘的引數被忽略:

connect(sender, signal(mysignal(int, const qstring &)),receiver, slot(myslot(int)));

6、獲得物件

qobject * qobject::sender () const [protected]

sender () 函式返回 訊號發出者 的 qobject型指標。

對qobject型指標進行強制轉換得到需要的。

在槽函式裡使用得到訊號傳送物件。

例如:

myslot(){

currentglwidget = qobject_cast

Qt中的訊號和槽

目錄 1 概念 2 自定義的訊號和槽 3 自定義的訊號和槽出現過載 4 qstring轉為char 5 lambda表示式 訊號和槽是用於將訊號傳送者與訊號處理者關聯起來 connect 訊號的傳送者,傳送的具體資訊,訊號的結束者,訊號的處理 槽 connect btn3,mypushbutton ...

Qt訊號和槽

qt將訊號和槽關聯起來的connect使用時需要注意帶相應的引數,否則會出現訊號發出後不能呼叫槽的問題,例子如下 發出訊號的宣告 signals void receiveddata uchar dat,uint len 接收訊號的槽宣告 private slots void getdata ucha...

Qt 訊號和槽

函式原型 qobject connect const qobject sender,const char signal,const qobject receiver,const char method,qt connectiontype type qt autoconnection 通常使用的con...