在 qt 中传递带有信号和插槽的参数
Passing arguments with signals and slots in qt
我是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
声明信号和插槽。
如果由于某种原因复制是不可能的,那么按照棘轮的建议传递指针
相关文章:
- 控制带有信号/插槽的Qt QML滑动视图
- Qt 信号/插槽问题
- Qt moveToThread,带有参数的信号/插槽
- moc 文件中缺少信号插槽
- 文档在哪里说明如果参数不是从末端删除参数,则无法从QT信号插槽连接中删除参数?
- 信号/插槽多线程 Qt
- 通过排队的QT信号插槽连接发送QSHAREDPOINTERS的QVECTOR
- Qimage没有通过信号插槽QT
- 使用 Qt5 的新信号/插槽实现向滑块发出信号
- 一个类中的QT信号/插槽,但从不同的线程发出
- 信号/插槽基类多继承
- 在QT C 中使用QMOVIE和信号/插槽之间在GIF中导航
- 在 for 循环中使用 lambda 函数连接信号插槽
- 不同类别的 2 个对象之间的信号/插槽
- 如何正确使用qt的信号/插槽系统
- Qt信号插槽视觉工作室:似乎未连接
- QACTION信号插槽中的无形UI
- Qt-连接触发动作中的信号/插槽
- Qt 信号插槽类范围类型
- 信号/插槽 Qt5 C++