1. 程式人生 > >Qt訊號和槽連線失敗原因及解決辦法

Qt訊號和槽連線失敗原因及解決辦法

有時候程式編譯成功了,但是connect並沒有將訊號和槽連線起來。Qt訊號和槽連線失敗原因主要有以下幾點:

  1. 槽函式並沒有宣告在類的public slots(或private slots或protected slots)裡,因此,所想要成為槽函式的那個函式只是普普通通成員函式。
  2. 訊號和槽之間存在引數傳遞,但是二者的引數數量或者型別不一致(訊號裡的引數數量可以多於槽函式裡的引數數量,但是二者都有的引數,型別必須對應);
  3. 訊號和槽之間有引數傳遞,但是使用connect的時候在槽函式或者訊號或者二者同時加入了形參
    ,比如下面的兩個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訊號和槽連線失敗原因主要有以下幾點: