Ich habe ein Programm in Qt5, die einfach erstellt und führt meine Klasse (I denken es muss eine Klasse sein, um den Signal/Slot-Mechanismus zu nutzen aber ich bin nicht sicher, dass für mein spezielles Problem relevant ist):Qt5 Signal Capture zu Slot erzeugt Laufzeitfehler "Signal existiert nicht"
int main(int argc, char *argv[]) {
MyApp myApp;
return myApp.run(argc, argv);
}
In der Klasse selbst, ich instanziiert ein QGuiApplication
, dann versuchen, sein Zustandsänderungssignal zu erfassen:
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';
}
};
Jetzt, von dem, was ich verstehe, sollte dies c das Signal vom Objekt QGuiApplication
bis zur Steckplatzfunktion im Objekt MyApp
an. Aber ich mache offensichtlich etwas nicht in Ordnung, da es während der Laufzeit beschwert, dass das Signal nicht existiert:
QObject::connect:
No such signal QObject::applicationStateChanged(Qt::ApplicationState)
in Prog.cpp:16
Die Qobject::
im Signalnamen ist ein bisschen eine Sorge. Ich hätte gedacht, es wäre QGuiApplication
, aber da ich neu in diesem Qt-Zeug bin, bin ich mir nicht sicher, ob das ein Problem ist.
Was ist der richtige Weg, um dieses Signal zu verbinden, so dass eine Änderung des Anwendungsstatus dazu führen würde, dass stateChanged
aufgerufen wird?
Es ist nicht genau unterstützt QObjects zu erstellen, bevor Sie eine QCoreApplication, nebenbei zu schaffen. Warum hast du diese seltsame Einkapselung? – peppe