Qt5,訊號槽關聯錯誤

2021-09-29 20:54:37 字數 865 閱讀 9245

一、錯誤提示

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...