Seite 1 von 1

Einbinden von .ui-dateien durch subclassing

Verfasst: 20. März 2010 14:09
von martin2_86
Hallo,

ich arbeite mit Qt Version 4.6.2 unter Visual Studio 2008 und habe noch wenig Erfahrung mit Qt. Ich möchte Oberflächen mit dem Qt Designer erstellen und diese dann in Visual Studio einbinden und mit funktionalität füllen. Eine erste Applikation (kleiner Taschenrechner) habe ich bereits erfolgreich erstellt (MainWindow in Qt designer erzeugt, das Codegerüst für VS habe ich aus einem Tutorial entnommen) und selbst einige funktionen implementiert. Anschließend will ich ein Optionsmenü implementieren, das durch ein Signal in der Toolbar aktiviert wird, und ein neues Fenster (von der Klasse QDialog) öffnet in dem die Einstellungen vorgenommen werden können. Dazu hab ich mit dem QDesigner ein neues .ui file erstellt, auf der Vorlage "Dialog with Buttons Bottom". Des weiteren habe ich für dieses neue Element eine .h file erstellt sowie eine .cpp file, in der ich eine Klasse für das Optionsfenster erzeuge, die die uic-erzeugte Klasse erbt. Nun das Problem: Muss diese neue von mir erstellte Klasse (nur) eine Unterklasse von der uic-erzeugten Klasse sein oder auch von QDialog? Und allgemein: Ist diese Vorgehensweise "richtig"? Parallel lese ich das Buch "C++ GUI Programming with Qt 3" von Jasmin Blanchette, aber dort ist diese Thematik nur ganz kurz beschrieben, da dort der Weg über ".ui.h" files dem sogenannten "subclassing" (meine Vorgehensweise) bevorzugt wird.
Wo kann ich zu diesem Thema mehr erfahren?

Vielen Dank im Voraus, Grüße
Martin

Verfasst: 20. März 2010 18:07
von franzf
Du kannst das mit dem Dialog doch genauso machen wie mit dem MainWindow.
Ansonsten: Ja, du musst von QDialog und der Ui-CLass erben. Pass aber auf die richtige Reihenfolge auf. ERST das QDialog, DANN das ui. steht aber so glaub ich auch in der Doku unter dem "Multiple Inheritance Approach".

Und du liest ein Buch über Qt3 und erhoffst dir daraus Hilfe beim Erstellen von Qt4-Anwendungen? Viel Erfolg :P
Einiges ist identisch, aber viele Qt3 Klassen gibt es nur noch über das Qt3Support-Modul, welches bei neuen Anwendungen eigentlich nicht verwendet werden sollte - ist für zügiges Portieren Qt3->Qt4 gedacht.
Viele interessante Sachen gibt es unter Qt4 die es unter Qt3 gar nicht gab.
Wenn du das Buch neu gekauft hast schau ob du es umtauschen kannst.

Verfasst: 21. März 2010 13:05
von martin2_86
Hi, erstmal vielen dank für deine Antwort!
Läuft jetzt super, unter "Multiple Inheritance Approach" hab ichs gefunden. Allerdings ist das tutorial für den Qt Designer in der neuen Doku (4.6) ziemlich versteckt find ich. Ich habs zuerst in der alten gefunden (4.5). Das Buch hab ich als PDF im Internet gefunden (wohl weil es sich auf das alte Qt bezieht). Dass die Versionen so unterschiedlich sind wusst ich nicht. Würdest du mir empfehlen ein Buch zu kaufen? Die doku zu Qt sieht mir ziemlich reichhaltig aus.

Gruß Martin

Verfasst: 21. März 2010 13:37
von franzf
martin2_86 hat geschrieben:Würdest du mir empfehlen ein Buch zu kaufen? Die doku zu Qt sieht mir ziemlich reichhaltig aus.
Ich würde nicht empfehlen dir ein Buch zu kaufen, denn die Doku ist ziemlich reichhaltig ;)
Ich hab das auch nur gesagt weil du erwähnt hattest dass du jenes ominöse Buch liest ;)

Schön dass es jetzt klappt!

Verfasst: 22. März 2010 10:45
von RHBaum
Multiple vererbung.
Viele verteufeln es, bei gleichgearteten Schnittstellen muss man denen aber recht geben.
Bei sorgsamer Verwendung und wenn die Schnittstellen schon im Hinblick auf die multiple vererbung gepflegt werden, iss es aber total unproblematisch.

Mein persoenliches Fazit:
multiple vererbung vermeiden, wenn es ohne grossen aufwand möglich ist.

Deshalb zu:
Und allgemein: Ist diese Vorgehensweise "richtig"?
Ich find sie aehm Suboptimal.
Ich arbeit mittlerweile auch ziemlich intensiv mit dem QT Designer, wenn ich mal was mit der qt mach.... und ich nehm nie die multiple Vererbungs-option.
Meine eigene Dialogklasse ist nur von QDialog abgeleitet.Hat einen Member "ui" der die Klasse aus dem ui (und die davon generierten header und sourcen) instanziert. Im konstruktor der DialogKlasse wird brav "ui.setupUi(this);" aufgerufen ... und auf die Controls komm ich per ui.[Control-name] drauf.
Und, auch die visual Studio Integration (von der QT) erzeugt mir dementsprechenden code beim einfuegen von neuen dialogen. Der QT creator sollte es dann aber auch oder ?

Iss ein Besipiel, wo man multiple Vererbung mit NULL Aufwand umgehen kann.
Iss aber auch ein bisserl persoenliche Vorliebe bei ...

Nen Nachschlagewer fuer die QT wuerd ich definitiv nicht kaufen, dafuer iss die online doku zu gut.
Nen gutes buch was techniken mit der qt und rundherum mit bissi Prosa erklaert, beschleunigt den Einsteig in die Keytechnologien IMHO schon erheblich (Model-View in der QT, QIODevices und konsorten, Plugin Konzepte ....)
DIe reine QT doku iss da sehr nuchtern und zaeh. Geht prinzipiell auch, man muss sich aber mehr durchbeissen.

Ciao ...

Verfasst: 23. März 2010 20:42
von martin2_86
Hi,
danke für deine ausführliche Erläuterung. Ich werde bei Zeit deine Methode mal ausprobieren. Buch werd ich wohl keines kaufen, so tief will ich nicht einsteigen. Danke nochmal!

Gruß