一、錯誤提示
error: c2664: 「qmetaobject::connection qobject::connect(const qobject *,const char *,const char *,qt::connectiontype) const」: 無法將引數 2 從「overloaded-function」轉換為「const char *」
二、錯誤原因
1、qt5的connect新增了編譯器型別檢查,如果遇到匹配失敗的,或者找不到訊號/槽的地方,會直接報錯,而不是qt4到執行期才告訴使用者。
2、使用函式指標能夠獲得編譯期的型別檢查,而這樣也有弊端,當遇到過載訊號槽的時候在編譯器就會報錯。
三、解決辦法
1、使用c++的靜態型別轉換。
qbuttongroup *btn = new qbuttongroup(this);
// 繫結訊號槽
connect(btn, static_cast(&qbuttongroup::buttonpressed),this, &panelwidget::btnpressed);
2、手動宣告乙個函式指標,只想目標的訊號/槽方法。
void (classa:: *p)(qstring, qdate) = &classa::signalfunciton;
connect(&a, p, &b, &reader::slotfunction);
或者
connect(&a,(void (classa:: *)(qstring, ))&classa::signalfunciton, b, &classb::slotfunction);
QT5 訊號與槽
前言 訊號與槽是qt的精華所在,也是他區分於其他軟體的關鍵地方,所以我們學習qt肯定無法繞過這一核心 當物件內部狀態發生改變,訊號就被反射,只有定義了這個訊號的類和他的子類才能發射這個訊號 訊號的宣告是在標頭檔案中進行的,qt的signals關鍵字指出進入了訊號宣告區,隨後即可宣告自己的訊號。訊號由...
Qt訊號槽自動關聯
想要槽函式自動關聯訊號,槽函式名稱必須遵循以下規則 void on 注意 這裡是物件名稱,也就是setobjectname設定的名稱,例如 qpushbutton pbutton new qpushbutton this pbutton setobjectname startbutton void ...
訊號與槽的新語法 Qt5
在 qt5 的 qtbase staging 倉庫的 qobject connect ptr 分支中已經引入了一種全新的訊號與槽的語法。參看 new signal slot syntax possibly coming in qt 5 一文。connect slider,signal valuech...