Qt 解決報錯registered using qRegisterMetaType()

一杯清酒邀明月發表於2024-06-12
在qt日常使用中,訊號與槽機制是絕對不可或缺且常用的,其中的引數一般都會比較簡單,bool、int、QString之類的,但當我們想要傳遞相對比較複雜的引數,例如QVector<int>、QList<QString>,以及一些我們自定義的結構體時,就會出現報錯:
1 > QOBject::connect:Cannot queue arguments of type 'QVector<int>'   
2 > (Makesure 'QVector<int>' is registed using qRegisterMetaType().)

  原因大概就是訊號槽的引數不支援你自定義的型別,只能識別QT庫中最基本的型別引數,所以需要對自定義型別進行註冊

qRegisterMetaType<QVector<int>>("QVector<int>");

  注意,不是在定義型別,或者定義結構體的地方進行註冊,而是在所需要用到的類的建構函式中進行註冊,比如我的一個自定義類,需要用到自定義的結構體做訊號引數,就在他的建構函式中註冊一下

1 CameraStartStop::CameraStartStop(QWidget *parent):QObject(parent)
2 {
3     qRegisterMetaType<QVector<int>>("QVector<int>");//不註冊會警告
4     setParent(nullptr);
5     //......
6 }

相關文章