Qt5信号捕获到槽产生运行时错误“;信号不存在”;



我在Qt5中有一个程序,它只是创建并运行我的类(我认为它必须是一个类才能利用信号/插槽机制,但我不确定这是否与我的特定问题有关):

int main(int argc, char *argv[]) {
    MyApp myApp;
    return myApp.run(argc, argv);
}

在类本身中,我实例化一个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对象中的slot函数。但我显然做错了什么,因为它在运行时抱怨信号不存在:

QObject::connect:
    No such signal QObject::applicationStateChanged(Qt::ApplicationState)
        in Prog.cpp:16

信号名称中的Qobject::有点令人担忧。我本以为会是QGuiApplication,但由于我是Qt的新手,我不确定这是否是个问题。

连接该信号的正确方式是什么,这样应用程序状态的变化就会导致调用stateChanged

要使信号工作,需要在QObject派生类的第一个私有部分的开头使用Q_OBJECT宏。

class MyApp : public QObject {
  Q_OBJECT
  public:
    // ...
}

参见Q_OBJECT 上的问题5.x文档

相关内容

  • 没有找到相关文章

最新更新