【发布时间】:2019-06-20 17:58:50
【问题描述】:
根据Qt documentation 和this question's answers 的建议,我的代码结构如下:
模拟器.h:
class Emulator : public QObject
{
Q_OBJECT
public:
enum HaltCause {
Breakpoint,
ReadWatch,
WriteWatch,
UserHalted,
Reset,
SingleStep,
};
Q_ENUM(HaltCause)
...
signals:
void emulationHalted(HaltCause cause);
...
};
我的 MainWindow 类有一个匹配的插槽:
private slots:
...
void onEmulationHalted(Emulator::HaltCause cause);
在mainwindow.cpp中,构造函数包含:
...
qRegisterMetaType<Emulator::HaltCause>();
...
以及稍后在 MainWindow 类中调用的方法中:
...
connect(m_emulator, &Emulator::emulationHalted, this, &MainWindow::onEmulationHalted);
...
Emulator 类是线程化的,因此它的信号和 MainWindow 的插槽之间的连接是排队的。
尽管看似遵循了将某些东西放入 Qt 元对象系统的所有准则,但当 Emulator 的线程 emits 发出信号时,我仍然收到此调试消息:
QObject::connect: Cannot queue arguments of type 'HaltCause'
(Make sure 'HaltCause' is registered using qRegisterMetaType().)
我已经尝试过将Enumeration::HaltCause 用作简单的enum 和强类型的enum class。两者产生相同的结果。
我错过了什么?
【问题讨论】:
标签: c++ qt enums enum-class