gpt4 book ai didi

c++ - Qt中如何用宏定义信号

转载 作者:行者123 更新时间:2023-11-30 03:40:20 25 4
gpt4 key购买 nike

我尝试为某些带有宏的类创建一些标准信号定义,例如:

#define CREATE_SIGNALS signals: void error_signal(QString error);

创建了函数,但是 moc 没有为这些函数创建方法。似乎 moc 在处理宏之前正在运行。我怎样才能使它工作?

最佳答案

Moc 对其工作的源进行预处理,因此一旦您真正让宏定义了一些信号而不是常规方法,您的宏就会工作。

下面是一个完整的例子:

#include <QtCore>
#include <array>
#include <algorithm>

#define CREATE_SIGNALS\
Q_SIGNAL void signal1(const QString & = QString());\
Q_SIGNAL void signal2(int = 0);

struct Foo : QObject {
CREATE_SIGNALS
Q_OBJECT
};

struct Bar : QObject {
CREATE_SIGNALS
Q_OBJECT
};

int main()
{
std::array<int, 4> s;
Foo foo;
Bar bar;
s.fill(0);
QObject::connect(&foo, &Foo::signal1, [&]{++s[0];});
QObject::connect(&foo, &Foo::signal2, [&]{++s[1];});
QObject::connect(&bar, &Bar::signal1, [&]{++s[2];});
QObject::connect(&bar, &Bar::signal2, [&]{++s[3];});
emit foo.signal1();
emit foo.signal2();
emit bar.signal1();
emit bar.signal2();
Q_ASSERT(std::all_of(std::begin(s), std::end(s), [](int val) { return val == 1; }));
}

#include "main.moc"

关于c++ - Qt中如何用宏定义信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38107329/

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