Signals definieren bzw. nutzen

Alles rund um die Programmierung mit Qt
Antworten
axw
Beiträge: 3
Registriert: 10. Dezember 2008 15:49

Signals definieren bzw. nutzen

Beitrag von axw »

Hallo!

Ich habe ein ganz einfaches Fensterchen mit Designer erstellt (Qt 4.4.3 OS) unter Windows. Es dient mir lediglich dazu, herauszufinden, wie man mit QT4 mit Signals und Slots bzw. Memberfunktionen von Fenstern umgeht.

Ich kann wunderbar existierende Signals und Slots von Elementen in meinem Fester verbinden. Der UIC erzeugt die verschiedenen Verbindungen und die funktionieren zur Laufzeit auch.

Jetzt habe ich aber in meinem Fester selbst (im Designer) ein Testsignal und einen Testslot angelegt. Die Verbindungen, die ich im Designer dafür definiert habe, legt der UIC im Code auch an. Aber er legt keine Signals an. Wenn ich mir Beispiele für vom UIC erzeugte Dateien anschaue, dann enthalten sie auch die Signal-Deklaration, meine aber nicht.

Was mache ich falsch?

Kann mir jemand erklären, wie das ganze Konstrukt aus diesen Designer-generierten Ui-"Templates" zur Erzeugung von Fenstern und deren Setup mit setupUi funktionieren soll? Die Tutorials bzw. Doku sind hier alles andere als hilfreich.
Insbesondere würde mich interessieren, wo ich Member-Funktionen von Fenstern erzeugen kann, so dass diese erhalten bleiben bei erneutem UIC-Aufruf. Meine Idee war, (durch irgendeine Seite in der Doku inspiriert), eine Klasse von sowohl einer Qt-Fensterklasse als auch von der Designer-erzeugten Ui::-Klasse abzuleiten und im Konstruktor setpUI aufzurufen. Das kompiliert, macht aber dann in dem Moment Probleme, wo ich das Q_OBJECT-Macro einbinde, dann bekomme ich Linker-Errors mit metaobject-Meldungen, abwohl ich alle wichtigen libs einbinde. Was mich auch sehr wundert, ist dass der moc leere .cpp-Dateien erzeugt. Das bin ich aus alten Versionen anderes gewohnt.

Hat jemand eine Idee?

Vielen Dank!
The User
Beiträge: 62
Registriert: 11. Dezember 2008 23:48

Beitrag von The User »

Also erstmal zu den benutzerdefinierten Signals:
Du hast also eine eigene Klasse, die eigene Signale haben soll. Warum deklarierst du die Signale nicht einfach manuell ind der .h-Datei?

Code: Alles auswählen

signals:
    void mySignal(QString message);
   ...
Mit emit kannst du die ganz normal auslösen. Der Designer kennt wohl benutzerdefinierte Klassen und man kann die Signals eintragen, aber die Klasse anlegen kannst du dann noch selbst machen.

Bei den uic-erstellten Dateien liegen alle Objekte hinter Zeigern, in der setupUi werden diese Zeiger dann mit new ... zugewiesen. Du kannst das setupUi einfach im Konstruktor der abgeleiteten Klasse definieren.

Linker-Fehler: Was für Fehler erhälst du? Ein Meldung wäre informativ. ;)

Viele liebe Grüße
The User
Antworten