用qt中的信号和槽传递参数

时间:2013-12-18 09:54:20

标签: c++ qt

我是qt的新手,我有一个问题。

我想连接信号和插槽。

QObject::connect(_Requests, SIGNAL(newJobsAvailable(const MyClass &)), _Object, SLOT(doSend(const MyClass &)));

qt抱怨无法排队MyClass等等。

如何使用

正确声明它
qRegisterMetaType<const MyClass &>("const MyClass&");

2 个答案:

答案 0 :(得分:1)

如果Qt抱怨无法为您排课,这意味着,Qt无法复制并放入您班级的QVariant对象。
这仅表示只有直接连接才有效。这是什么意思?如果您在connect中使用最后一个参数的默认值,那么线程之间的连接将无法正常工作! 将connect的最后一个参数设置为Qt::DirectConnection可以使警告静音,而Qt::QueuedConnection值根本不起作用。

另一种解决方法是注册您的类型。但你应该在没有任何限定条件的情况下这样做!

qRegisterMetaType<MyClass>("MyClass");

如果您使用的是Qt5,请考虑在MyClass中使用Q_GADGET宏(只需将其放在类定义的开头,并将标题添加到专业文件中的HEADERS)。

答案 1 :(得分:0)

您需要确保MyClass具有 public 默认和复制构造函数。因为可能会复制对象,即使您使用const ref声明信号和插槽。

如果出于某种原因,复制是不可能的,那么按照棘轮

的建议传递指针