我是qt的新手,我有一个问题。
我想连接信号和插槽。
QObject::connect(_Requests, SIGNAL(newJobsAvailable(const MyClass &)), _Object, SLOT(doSend(const MyClass &)));
qt抱怨无法排队MyClass
等。
如何正确声明它
qRegisterMetaType<const MyClass &>("const MyClass&");
如果Qt抱怨无法将你的类排队,这意味着Qt无法复制并放入你的类的QVariant对象中。
这仅意味着只有直接连接才能工作。什么意思?如果您使用connect
最后一个参数的默认值,则线程之间的连接将不起作用!将 connect
的最后一个参数设置为 Qt::DirectConnection
应该使警告静音,并且值Qt::QueuedConnection
将根本不起作用。
修复它的另一种方法是注册您的类型。但是你应该在没有任何限定符的情况下执行此操作!
qRegisterMetaType<MyClass>("MyClass");
如果您使用的是 Qt5,请考虑在 MyClass
中使用Q_GADGET宏(只需将其放在类定义的开头,并将标头添加到 pro 文件中的 HEADERS)。
确保MyClass
具有公共默认值和复制构造函数。因为对象可能会被复制,即使您使用 const ref
声明信号和插槽。
如果由于某种原因复制是不可能的,那么按照棘轮的建议传递指针