gpt4 book ai didi

c++ - Qt Queued Slots 中的枚举和枚举类

转载 作者:行者123 更新时间:2023-11-28 04:15:51 25 4
gpt4 key购买 nike

遵循 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 的元对象系统的所有指南,但当仿真器的线程发出信号时,我仍然会收到此调试消息:

QObject::connect: Cannot queue arguments of type 'HaltCause'
(Make sure 'HaltCause' is registered using qRegisterMetaType().)

我已经尝试将 Enumeration::HaltCause 作为简单的 enum 和强类型的 enum class。两者产生相同的结果。

我错过了什么?

最佳答案

事实证明,在Emulator 的插槽声明中使用的非限定HaltCause 混淆了元对象系统。决议是改变

signals:
void EmulationHalted(HaltCause cause);

signals:
void EmulationHalted(Emulator::HaltCause cause);

在模拟器声明 (emulator.h) 中。

关于c++ - Qt Queued Slots 中的枚举和枚举类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56691526/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com