1、connect()函式實現的是訊號與槽的關聯。
注意:只有qo bject類及其派生的類才能使用訊號和槽的機制
2、函式原型
static qmetaobject::connection connect(const qobject *sender, const char *signal,const qobject *receiver, const char *member, qt::connectiontype = qt::autoconnection);
static qmetaobject::connection connect(const qobject *sender, const qmetamethod &signal,const qobject *receiver, const qmetamethod &method,
qt::connectiontype type = qt::autoconnection);
inline qmetaobject::connection connect(const qobject *sender, const char *signal,const char *member, qt::connectiontype type = qt::autoconnection) const;
在第乙個函式中:第乙個引數為發射訊號的物件,例如後面的dlg;第二個引數是要發射的訊號,例如後面的signal(dlgreturn(int));
第三個引數是接受訊號的物件,例如後面的this,表明是本部件,即widget,當這個引數是this時,可以將其省略掉,因為在第三個函式中,該引數預設為this;第四個引數是要執行的槽,例如
後面的slot(showvalue(int)),也可以指定乙個訊號,實現訊號與訊號的關聯。
eg:
mydialog *dlg=new mydialog(this);//將對話方塊中的自定義訊號與主介面中的自定義槽進行關聯
connect(dlg,signal(dlgreturn(int)),this,slot(showvalue(int)));
dlg->show();
注意:
1、對於訊號與槽,必須使用signal()和slot()巨集,它們將引數轉化為const char *型別
2、第四個引數指定的槽宣告時必須使用slots關鍵字。
eg:
private slots://槽的宣告
void showvalue(int value);
void on_label_linkactivated(const qstring &link);
qt中的connect訊號和槽不在同乙個執行緒
主線程中發出乙個訊號,另乙個執行緒槽函式沒有響應,這個問題搞了好幾個小時,才發現原來是connect時候的第5個引數寫錯了,在這裡做下備註吧。
connect用於連線qt的訊號和槽,在qt程式設計過程中不可或缺。它其實有第五個引數,只是一般使用預設值,在滿足某些特殊需求的時候可能需要手動設定。
qt::autoconnection: 預設值,使用這個值則連線型別會在訊號傳送時決定。如果接收者和傳送者在同乙個執行緒,則自動使用qt::directconnection型別。如果接收者和傳送者不在乙個執行緒,則自動使用qt::queuedconnection型別。
qt::uniqueconnection:這個flag可以通過按位或(|)與以上四個結合在一起使用。當這個flag設定時,當某個訊號和槽已經連線時,再進行重複的連線就會失敗。也就是避免了重複連線。
QT的connect函式總結
第一種寫法 connect m pbtn,signal sigclicked this slot onclicked 第二種寫法 connect m pbtn,mybutton sigclicked,this widget onclicked 當訊號過載時不能區分訊號導致bug 第三種寫法 conn...
QT訊號槽connect函式
使用qt開發時,通常使用connect函式只傳遞四個引數 connect sender,signal signal receiver,slot slot 所以我們有可能認為該函式就只有四個引數,但實際上是有第五個引數的,只是通常該函式已經給第五個引數賦值了而已,我們所使用的是預設值 sender和r...
QT中的connect用法總結
首先來看看老版本的 connect 寫法,比較複雜些,需要將訊號和槽進行明確的指定,包括形參。看乙個示例 為方便演示,先自定義乙個 button,然後定義兩個過載的訊號 class mybutton public qwidget 那麼在用這個 button 的時候連線這兩個訊號,按照舊版本的寫法,應...