我是qt的新手,我有一个问题。
我想连接信号和插槽。
QObject::connect(_Requests, SIGNAL(newJobsAvailable(const MyClass &)), _Object, SLOT(doSend(const MyClass &)));
qt抱怨无法排队MyClass
等等。
如何使用
正确声明它qRegisterMetaType<const MyClass &>("const MyClass&");
答案 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
声明信号和插槽。
如果出于某种原因,复制是不可能的,那么按照棘轮
的建议传递指针