[英]Passing arguments with signals and slots in qt
我是新手,我有一個問題。
我想連接信號和插槽。
QObject::connect(_Requests, SIGNAL(newJobsAvailable(const MyClass &)), _Object, SLOT(doSend(const MyClass &)));
qt抱怨無法將MyClass
等排隊。
我如何正確聲明
qRegisterMetaType<const MyClass &>("const MyClass&");
如果Qt抱怨無法將您的課程排隊,則意味着Qt無法復制並放入您的課程的QVariant對象。
這僅意味着僅直接連接將起作用。 這是什么意思? 如果您在connect
中使用last參數的默認值,則線程之間的連接將不起作用! 將connect
最后一個參數設置為Qt::DirectConnection
應該使警告靜音,並且值Qt::QueuedConnection
將根本不起作用。
解決該問題的另一種方法是注冊您的類型。 但是您應該在沒有任何限定詞的情況下執行此操作!
qRegisterMetaType<MyClass>("MyClass");
如果您使用的是Qt5,請考慮在MyClass
使用Q_GADGET宏(只需將其放在類定義的開頭,然后將頭文件添加到pro文件中的HEADERS中)。
您需要確保MyClass
具有公共默認值和副本構造函數。 因為可能會復制對象,即使您使用const ref
聲明信號和插槽也是如此。
如果出於某種原因無法復制,則按照棘輪提示傳遞指針
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.