Qt訊號和槽連線失敗原因及解決辦法
阿新 • • 發佈:2018-12-03
有時候程式編譯成功了,但是connect並沒有將訊號和槽連線起來。Qt訊號和槽連線失敗原因主要有以下幾點:
- 槽函式並沒有宣告在類的public slots(或private slots或protected slots)裡,因此,所想要成為槽函式的那個函式只是普普通通成員函式。
- 訊號和槽之間存在引數傳遞,但是二者的引數數量或者型別不一致(訊號裡的引數數量可以多於槽函式裡的引數數量,但是二者都有的引數,型別必須對應);
- 訊號和槽之間有引數傳遞,但是使用connect的時候在槽函式或者訊號或者二者同時加入了形參
///connect 1
connect(sender, SIGNAL(sendMessage(int a)), receiver, SLOT(getMessage(int b)));
///connect 2
connect(sender, SIGNAL(sendMessage(int)), receiver, SLOT(getMessage(int)));
4.訊號和槽之間存在自定義引數傳遞,但是傳遞的型別沒有註冊。什麼叫做自定義引數呢?在傳遞int,double,char,bool,float等型別的時候沒問題,但是傳遞比如QList類,或者自定義的結構體、類等時,連線將會失
敗。此時會報以下錯誤:
///QList<double>為自定義型別
connect(this,SIGNAL(moveToOnePoint(QList<double>)),robot1,SLOT(moveToAppointPoint(QList<double>)));
此時我們需要註冊這種自定義型別,首先包含標頭檔案
//新增檔案引用
#include <QMetaType>
在connect之前註冊:
//註冊引數型別
qRegisterMetaType<QList<QString> > ("QList<double>" );
這樣就可以連線成功啦!
原文地址:https://blog.csdn.net/sinat_21107433/article/details/80974620
有時候程式編譯成功了,但是connect並沒有將訊號和槽連線起來。Qt訊號和槽連線失敗原因主要有以下幾點: