[英]How to define signals with macros in Qt
我尝试为一些带有宏的类创建一些标准信号定义:
#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"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.