Qt-Designer überhaupt brauchbar?

Alles zu Entwicklungsumgebungen und Editoren für Qt
Antworten
odenter
Beiträge: 36
Registriert: 5. Dezember 2009 10:02

Qt-Designer überhaupt brauchbar?

Beitrag von odenter »

Ich probiere gerade mal ein bischen mit dem Designer rum und habe nun ein Problem und stehe vor der Grundsätzlichen Frage ob GUI's (mit Qt) per Code zu erzeugen sind, oder der Designer doch zu gebrauchen ist.

Was will ich machen?
Ich habe eine Daten-Klasse die eine public Variable vom Typ QString enthält, sowie diverse Signale für OnChange, OnChanged etc.

Das LineEdit soll an die Daten-Klasse gebunden werden und Änderungen nur darüber laufen, LineEdit zeigt also immer den aktuellen Text an.

Wenn der QPushButton gedürck wird, soll der Inhalt der Variablen, der Daten-Klasse, in einer QMessageBox ausgegeben werden.

Kann es sein das dies mit dem Designer so überhaupt nicht geht?
Es wird z.B. in meiner MainWindow-Class überhaupt kein Code für das LineEdit oder den QPushButton erzeugt (so wie beim MSVC und C# z.B.), irgendwo muss aber solcher Code sein, weil nach dem Ausführen sehe ich ja ein LineEdit und QPushButton.

Da es keinen Code gibt (bzw. ich keinen finde) kann ich meine Daten-Klasse auch nicht mit dem LineEdit verbinden.

Geht das was ich da machen will also vielleicht gar nicht mit dem Designer sondern nur per Code, weil ich sonst nicht an das LineEdit so herankomme wie ich das muss?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Der Designer ist kein Klick'n'Pray Werkzeug. Er ist nur zum Erzeugen von Oberflächen zuständig. Code muss man von Hand schreiben.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
odenter
Beiträge: 36
Registriert: 5. Dezember 2009 10:02

Beitrag von odenter »

Christian81 hat geschrieben:Der Designer ist kein Klick'n'Pray Werkzeug. Er ist nur zum Erzeugen von Oberflächen zuständig. Code muss man von Hand schreiben.
Wie jetzt?
Ich kann eine Oberfläche erzeugen, und wo ist der Code dieser Oberfläche?
Wo finde ich die Variable die meine LineEdit oder QPushButton darstellt um m icht per Code an deren Signale bzw. Slots zu hängen?

Das ich das Verhalten auf Knopfdruck selber implementieren muss ist mir schon klar.

Wenn ich in MSVC einen Button auf einen Dialog ziehe, dann kann ich in der klasse des Dialogs/Forms folgendes machen

Code: Alles auswählen

this.meinButton.Click += new EventHandler(...);
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Der Objektname ist der Name mit dem man das Widget ansteuern kann. Der Code wird vom uic erzeugt. Aber Code im Designer schreiben geht nicht (das Ding heisst ja nicht umsonst designer).
Ich würde erstmal mit Tutorial lesen anfangen -> http://doc.trolltech.com/4.5/designer-manual.html
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Tuxing
Beiträge: 52
Registriert: 28. Oktober 2009 11:13

Beitrag von Tuxing »

Der QT-Designer trent strikt Design und Funktion. Wenn du ein neues Projekt erstellt hast (QT-Gui-Anwendung), erstellt der QT-Designer dir ja die erste Klasse. Er nennt sie immer "mainwindow". Vll. hast du diese ja auch umbenannt.
Mit dieser Klasse bekommst du folgende Dateien in deinem Projektverzeichnis:

mainwindow.cpp
mainwindow.h
mainwindow.ui
ui_mainwindow.h

Wenn du nun hingehst und dir eine GUI bastelst (also Elemente einfügst wie zb: lineEdits ) dann wird der Code zum erstellen dieser Elemente nich in der mainwindow.h bzw cpp gespeichert, sondern in der ui_mainwindow.h
Das ist sozusagen ein Container, der all das enthält, was du auf deiner GUI zusammenbastelst.
Wenn du mal in die mainwindow.h schaust, siehst du dass das erste private Attribut Ui::mainwindow *ui; ist. Außerdem findest du im Konstruktor (in der cpp) ui->setupUi(this); damit wird dein "Container" für die graphischen Elemente bekannt gemacht.

Wenn du in deiner cpp jetzt Code schreibst und auf die Elemente im Container zugreifen willst, machst du dass zb. so:

ui->LineEdit->setText("Hallo");

Vll hilft dir das ...
Gruß
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Tuxing hat geschrieben:Der QT-Designer trent strikt Design und Funktion. Wenn du ein neues Projekt erstellt hast (QT-Gui-Anwendung), erstellt der QT-Designer dir ja die erste Klasse. Er nennt sie immer "mainwindow". Vll. hast du diese ja auch umbenannt.
Mit dieser Klasse bekommst du folgende Dateien in deinem Projektverzeichnis:

mainwindow.cpp
mainwindow.h
mainwindow.ui
ui_mainwindow.h
Qt-Designer != Qt-Creator
Rufezeichenrufezeichenrufezeichen
(Gilt umgekehrt sowieso)

Der designer bringt dir genau eine Datei: Die mainwindow.ui, oder wie auch immer du die nennst.
qmake erstellt dir dann ein Makefile, welches aus dem *.ui ein ui_*.h mit Hilfe von uic macht. aber erst beim Make.
Wenn du nun hingehst und dir eine GUI bastelst (also Elemente einfügst wie zb: lineEdits ) dann wird der Code zum erstellen dieser Elemente nich in der mainwindow.h bzw cpp gespeichert, sondern in der ui_mainwindow.h
Nein, siehe oben. designer erstellt keinen Code, das macht dann der uic.

Der (ungequotete) Rest trifft nur für den Qt-Creator (der scheinbar beim Klassen-Erstell-Dialog schon ne .h und .cpp samt minimaler Implementierung erstellt) und nicht für den Designer!
odenter
Beiträge: 36
Registriert: 5. Dezember 2009 10:02

Beitrag von odenter »

Genau das habe ich gesucht, danke.

@all
Mein Problem war/ist das die *.h Datei nicht in die IDE in das Projekt eingefügt wird, für mich war selbstverständlich das alle (Code)Dateien zu einem Projekt auch in dem Projekt enthalten sind.

Ich glaube so langsam fängt das Framework mir an zu gefallen. :)
Tuxing
Beiträge: 52
Registriert: 28. Oktober 2009 11:13

Beitrag von Tuxing »

oh sorry .. mein fehler .. verwechselt. Sowas passiert wenn man den artikel nur schnell überfliegt und schnell antwortet :D
odenter
Beiträge: 36
Registriert: 5. Dezember 2009 10:02

Beitrag von odenter »

Tuxing hat geschrieben:oh sorry .. mein fehler .. verwechselt. Sowas passiert wenn man den artikel nur schnell überfliegt und schnell antwortet :D
Dein Beispiel war doch auch richtig. :)
softwaremaker
Beiträge: 149
Registriert: 1. April 2009 19:25

Qt-Creator

Beitrag von softwaremaker »

Das finde ich so gut am Qt-Creator, man kann im integrierten Designer einen rechten Mausklick auf ein Control machen und Goto Slot... auswählen und er legt im Code die Slot-Funktion an und springt dorthin.
Das geht bei der VS- und Eclipse-Integration leider nicht.
Antworten