簡體   English   中英

在Qt中傳遞帶有信號和槽的參數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM