bool QObject::connect(const QObject *sender, const char *signal,const QObject *receiver, const char *method,Qt::ConnectionType type = Qt::AutoConnection);1.sender: 一個指向信號發送者的QObject指針。這是發出信號的對象,可以是任何繼承自QObject的類的實例。注意:一個窗口接收另一個窗口中按鈕點擊之后發出的信號,發出信號者是那個窗口類的實例,而不是那個按鈕2.signal: 一個以null結尾的字符串,表示信號的聲明。
這個字符串應該與類中signals宏定義的信號名稱完全匹配。
例如,如果你的信號聲明為void mySignal();,那么這里的字符串應該是"mySignal"。注意點:
信號可以有參數,但是沒有返回值
connect函數的第二個參數是信號的聲明,而不是信號的實例。這是因為信號是與類相關聯的,而不是與類創建的某個特定實例相關聯。3.receiver: 一個指向槽函數接收者的QObject指針。這是將要接收信號并執行槽函數的對象。
4.method: 一個以null結尾的字符串,表示槽函數的聲明。這個字符串應該與類中槽函數的名稱完全匹配。
例如,如果你的槽函數聲明為void mySlot();,那么這里的字符串應該是"mySlot"。type: 一個可選參數,指定連接的類型。默認值是Qt::AutoConnection,表示Qt將根據上下文自動選擇連接類型。
Qt::DirectConnection: 直接連接,信號的發射將立即調用槽函數。
Qt::QueuedConnection: 排隊連接,信號的發射將導致槽函數在一個單獨的事件循環中被調用。
Qt::BlockingQueuedConnection: 阻塞排隊連接,類似于QueuedConnection,但發射信號的線程將等待槽函數完成執行。
在Widget窗口中有一個按鈕,點擊按鈕之后創建一個Form窗口,這個窗口中有一個按鈕,點擊之后會發出一個updateButtonSignal信號
Widget
void Widget::on_pushButton_clicked()
{Form *f = new Form(); 確保Form是Widget的子窗口f->show();//this->close();connect(f,&Form::updateButtonSignal,this,&Widget::test);
}
Form.cpp
void Form::on_pushButton_clicked()
{// close();// Widget *w = new Widget();// w->show();qDebug()<<"123";emit updateButtonSignal();}
在Form.h中聲明這個信號
signals:void updateButtonSignal();