Qt5 信号捕获到插槽产生运行时错误"signal does not exist"
Qt5 signal capture to slot generates runtime error "signal does not exist"
我在 Qt5 中有一个程序,它只是创建并 运行s 我的 class(我 认为 它必须是 class利用 signal/slot 机制,但我不确定这是否与我的具体问题相关):
int main(int argc, char *argv[]) {
MyApp myApp;
return myApp.run(argc, argv);
}
在 class 本身中,我实例化了一个 QGuiApplication
,然后尝试捕获其状态变化信号:
class MyApp : public QObject {
public:
MyApp() { }
~MyApp() { }
int run(int argc, char *argv[]) {
QGuiApplication app(argc, argv);
connect(
app, SIGNAL(applicationStateChanged(Qt::ApplicationState)),
this, SLOT(stateChanged(Qt::ApplicationState)));
// blah blah blah
return app.exec();
}
public slots:
void stateChanged(Qt::ApplicationState newState) {
std::cout << "State changed to " << newState << '\n';
}
};
现在,据我了解,这应该将来自 QGuiApplication
对象的信号连接到 MyApp
对象中的槽函数。但我显然做错了什么,因为它在 运行 时抱怨信号不存在:
QObject::connect:
No such signal QObject::applicationStateChanged(Qt::ApplicationState)
in Prog.cpp:16
信号名称中的Qobject::
有点担心。我原以为会是 QGuiApplication
但是,因为我是这个 Qt 的新手,所以我不确定这是否是个问题。
连接该信号的正确方法是什么,以便应用程序状态的更改会导致 stateChanged
被调用?
要使信号正常工作,需要在 QObject
派生的 class.
的第一个私有部分的开头使用 Q_OBJECT
宏
class MyApp : public QObject {
Q_OBJECT
public:
// ...
}
我在 Qt5 中有一个程序,它只是创建并 运行s 我的 class(我 认为 它必须是 class利用 signal/slot 机制,但我不确定这是否与我的具体问题相关):
int main(int argc, char *argv[]) {
MyApp myApp;
return myApp.run(argc, argv);
}
在 class 本身中,我实例化了一个 QGuiApplication
,然后尝试捕获其状态变化信号:
class MyApp : public QObject {
public:
MyApp() { }
~MyApp() { }
int run(int argc, char *argv[]) {
QGuiApplication app(argc, argv);
connect(
app, SIGNAL(applicationStateChanged(Qt::ApplicationState)),
this, SLOT(stateChanged(Qt::ApplicationState)));
// blah blah blah
return app.exec();
}
public slots:
void stateChanged(Qt::ApplicationState newState) {
std::cout << "State changed to " << newState << '\n';
}
};
现在,据我了解,这应该将来自 QGuiApplication
对象的信号连接到 MyApp
对象中的槽函数。但我显然做错了什么,因为它在 运行 时抱怨信号不存在:
QObject::connect:
No such signal QObject::applicationStateChanged(Qt::ApplicationState)
in Prog.cpp:16
信号名称中的Qobject::
有点担心。我原以为会是 QGuiApplication
但是,因为我是这个 Qt 的新手,所以我不确定这是否是个问题。
连接该信号的正确方法是什么,以便应用程序状态的更改会导致 stateChanged
被调用?
要使信号正常工作,需要在 QObject
派生的 class.
Q_OBJECT
宏
class MyApp : public QObject {
Q_OBJECT
public:
// ...
}