Ich bin ziemlich neu in Qt. Ich habe einige einfache Änderungen an einer bestehenden Qt-Anwendung vorgenommen, aber ich habe noch keine von Grund auf neu erstellt.
Ich habe auch nicht wirklich viel Erfahrung mit bestimmten Aspekten von C ++ im Allgemeinen (Klassenvererbung usw.).
Ich habe ein neues Code :: Blocks Qt4-basiertes Projekt erstellt und die Vorlage ein wenig modifiziert. Ich habe zwei Dateien hinzugefügt.
Momentan enthält das Projekt drei Dateien: main.cpp, app.h und app.cpp.
Dies ist der Inhalt von main.cpp :
So sieht app.h aus:
%Vor%Und das ist app.cpp :
%Vor% Ich erwartete, dass das Programm eine Sekunde nach dem Start "timeout called" ausgibt. Leider funktioniert das nicht. Wenn QTimer::singleShot()
aufgerufen wird, sagt die Konsole:
Ich habe keine Ahnung, wie ich damit umgehen soll. Vielen Dank im Voraus.
Sie vermissen einfach das Makro Q_OBJECT
in Ihrer TestApp-Klasse:
Dies ist notwendig, damit die gesamte Signal / Slot-Infrastruktur funktioniert (und von einer Klasse abstammt, die dieses Makro nicht besitzt).
(Stellen Sie sicher, dass Sie nach dieser Änderung einen vollständigen, sauberen Build erstellen - und wenn Sie qmake
oder ein anderes Qt-aware Build-System nicht verwenden, müssen Sie moc
selbst ausführen.)
Weitere Informationen finden Sie in der Dokumentation QObject
:
Beachten Sie, dass das Makro Q_OBJECT für jedes Objekt obligatorisch ist, das Signale, Slots oder Eigenschaften implementiert. Sie müssen den Meta-Objekt-Compiler auch für die Quelldatei ausführen. Wir empfehlen dringend, dieses Makro in allen Unterklassen von QObject zu verwenden, unabhängig davon, ob sie tatsächlich Signale, Slots und Eigenschaften verwenden oder nicht, da dies bei bestimmten Funktionen zu merkwürdigem Verhalten führen kann.
Tags und Links c++ qt inheritance connect signals-slots