PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anfängerfrage Qt: Arbeitsplanung beim Programieren?



Terror
23-02-2006, 12:44
Hallo, ich bin blutiger Anfänger und fange gerade an mich unter Qt (Windows) einzuarbeiten.
Ich weiss nicht ob ich den Weg zur Programmerstellung richtig verstanden habe. :(

Ich habe die Tutorials gelesen, und diese sind ja auch schön und gut, aber gerade beim Designer weiss ich nicht weiter.

1. Ich erstelle meine Form .ui mit dem Designer.
2. Mit uic erstelle ich aus der Datei eine cpp.
3. Abschließend weiter mit qmake -project und qmake und make usw.

Ich verstehe nicht, wo ich im Designer den Code eingebe. Ich habe in der Schule unter Linux bei den Solts zum Beispiel die Möglichkeit gehabt eine neue Funktion einzubinden. Das geht hier nicht.

Ich habe ja die Möglichkeit aus meinen PushButton mit rechter Maus auf den Button eine neue Klasse abzuleiten.
Dann kommt das Menü und ich kann den Namen eingeben. Die Datei lautet dann z.B. Test.h.
Diese Datei existiert aber nicht, muss ich die mit der Hand anlegen? Habe ich dann mal gemacht.
Dann würde ich gerne den Code da bearbeiten, das geht aber nicht im Designer?
Ich konnte früher in der Schule einfach NEWFile und dann main.cpp erstellen und da den Text eingeben. Geht auch nicht.
Irgendwie ist das nicht rund was ich mache.
Auch sollte doch der Code der an den Button hängt mit einigen Mausklicks erreichbar sein oder? Ich sollte doch im Designer dann den Code der Test.h bearbeiten können oder? Warum überhaupt ein Header und nicht die cpp? Aber egal, damit kann ich leben, wird halt später geändert.
Aber kann ja nicht jedesmal bei 100 Button in den Explorer wechseln und den Code im Editor eingeben.
Dann wandle ich die UI um und compiliere das alles? Ist zum Debuggen doch zu umständlich oder?

Die Tutorials auf www.trolltech.com sind ja alle toll und funktionieren ja auch, aber eine UI Datei ist da selten bei. Das compilieren ist ja auch kein Problem, sondern die Programmerstellung.
Da steht dann mit uic umwandeln und halt in die Projektdatei einarbeiten. Klar dafür muss ich aber auch erstmal ein Programm schreiben können.

Ich hoffe ihr versteht was ich meine, ich finde den Arbeitsablauf nicht.:confused:
Ich hoffe ihr habt mal ein Tip.

Danke fürs lesen.

Boron
23-02-2006, 14:10
Schau dir hier drin mal besonders den 7. Beitrag an (Lektion 7):
http://www.mrunix.de/forums/showthread.php?t=36851

Da beschreibt anda_skoa sehr gut wie es geht.

Kurzfassung:
- Im Designer Oberfläche erstellen.
- Mit dem uic Header und cpp Datei erstellen
- Diese Klasse ist nun Basisklasse
- Du leitest von dieser Basisklasse ab und kannst deine Anwendungslogik implementieren

stefan-tiger
23-02-2006, 18:10
So habs ich sbis vor kurzem auch gemacht, was aber wenn man noch viel an der GUI ändert während man schon teilweise Funktioen implementiert ein bisschen läßtig ist.

Ich habe jetzt auf KDevelop mit automake umgestellt. Die Basisklasse aus der ui erzeugt KDevelop dann nämlich nur temporär und gearbeitet wird schon mit einer Klasse die davon abgeleitet ist.

Das ganze geht auch relativ einfach. Am Einfachsten ist es sogar wenn man noch garkeine ui Datei hat, aber selbst dann (wie bei mir) gehts, und zwar so:

- Starte KDevelop
- Neues Projekt -> C++ -> KDE -> simples designerbasierendes Projekt
- next next, finish ;)
- Gleichmal auf "run" klicken und sicherstellen, daß auch alles geht.

Wenn du keine ui hast, dann fange an die jetzt vorhandene für deine Zwecke auszubauen.
Hats du schon eine ui, dann ersetzt du die generierte durch deine.
Achte darauf, daß deine Oberfläche von "QObject" und nicht von "QDialog" abgeleitet ist! (Kann einfach in der ui mit einem Text-Editor geändert werden)

Voila :)

anda_skoa
23-02-2006, 22:46
Achte darauf, daß deine Oberfläche von "QObject" und nicht von "QDialog" abgeleitet ist! (Kann einfach in der ui mit einem Text-Editor geändert werden)


QWidget

und man kann das gleich als Basisklasse wählen, wenn man die entsprechende Vorlage im Startdialog des Designers auswählt.

Ciao,
_

stefan-tiger
24-02-2006, 07:21
QWidget

und man kann das gleich als Basisklasse wählen, wenn man die entsprechende Vorlage im Startdialog des Designers auswählt.

Ciao,
_

sorry, meinte QWidget

Terror
24-02-2006, 07:50
Erstmal danke für eure Antworten.
Ne, sorry Lektion 7 hatte ich schon gelesen, betrifft mich überhaupt nicht.
Steht nix von drin was ich brauche.

Wo gebe ich mein Code denn ein? Da gab es im Designer doch die Möglichkeit Code eingeben zu können.

Ich erstelle doch nicht die Öberfläche und erstelle den Code anschließend seperat nachdem ich die UI umgewandelt habe. Das wäre ja Schwachsinn.

Schau mal bitte hier;
http://www.lcs-chemie.de/qtdesigner.htm

Der klickt einfach auf auf New und gibt den Code direkt ein. Das war wohl 3.0 so kenne ich das auch, wo ist denn der Punkt in QT 4?

peschmae
24-02-2006, 07:55
Wieso wäre das schwachsinn? Separierung ist sehr oft eine gute Sache.

Das Beispiel ist das Ding mit der ui.h - aber den Ansatz mögen die meisten nicht so (einige mögen den auch *gar* *nicht*). Wenn ich mich nicht irre ist auch Trolltech mit Qt4 mehr oder weniger davon abgekommen das zu empfehlen.

MfG Peschmä

Terror
24-02-2006, 08:14
Wieso wäre das schwachsinn? Separierung ist sehr oft eine gute Sache.


Na Schwachsinn, weil dann kann ich gleich wieder wie anno 1970 im Texteditor programmieren. Wofür gibts denn eine IDE, kann nicht glauben dass man die wieder abschafft.
Früher konnte ich den Slot markieren und direkt im Slot-Editor auf neu klicken.
Dann ging das Fenster auf wo ich meine Funktion eingetragen habe.
Ich konnte später den Button anklicken und direkt den Code erneut abändern.

Wenn ich dich richtig verstehe soll ich jetzt eine UI komplett erstellen mit 40 Button, Textboxen, Sliders, Group Button und so weiter, dann umwandeln mit in cpp und danach anfangen die Funktionen einzugeben.
Und wenn mir dann einfällt ich brauche noch 2 Button, wandle ich den ganzen Kram wieder um und frickeln mir den Code da zurecht?
Kann ich irgendwie nicht glauben, dass das so richtig sein soll.

Ergibt für mich kein Sinn. Und ich hoffe ich verstehe das Geschriebene jetzt richtig, dass ist der akutelle Weg in QT zu programmieren?

stefan-tiger
24-02-2006, 09:22
... Und wenn mir dann einfällt ich brauche noch 2 Button, wandle ich den ganzen Kram wieder um und frickeln mir den Code da zurecht? Kann ich irgendwie nicht glauben, dass das so richtig sein soll...

Hast du mein Post gelesen und mal befolgt?

Du musst GARNICHTS mit irgendwelchen Umwandlungen oder .h Dateien selber machen die die Oberfläche betreffen.
Das macht KDevelop automatisch. Man arbeitet nur in der abgeleiteten Klasse. Diese ist zu Beginn an leer. Beim Implementieren überlädst du die Funktionen der Basisklasse, mit der du aber nichtzs machen brauchst.
Wenn ich im Designer in KDevelop ein Button änder oder dergleichen kann ich jederzeit Rechtklick -> zum Quellcode springen machen. Dann macht KDevelop automatisch die richtige .cpp Datei auf und Springt falls vorhanden an die Stelle der Implementierung. Achja: der Designer öffnet sich innerhalb KDevelop in einem Fenster, wenn man eine .ui Datei anklickt. Man hat also alles schön auf einer Oberfläche.

Terror
24-02-2006, 09:40
Hast du mein Post gelesen und mal befolgt?

Du musst GARNICHTS mit irgendwelchen Umwandlungen oder .h Dateien selber machen die die Oberfläche betreffen.
Das macht KDevelop automatisch. Man arbeitet nur in der abgeleiteten Klasse.
Wenn ich im Designer in KDevelop ein Button änder oder dergleichen kann ich jederzeit Rechtklick -> zum Quellcode springen machen. Dann macht KDevelop automatisch die richtige .cpp Datei auf und Springt falls vorhanden an die Stelle der Implementierung


Da ganz oben steht WINDOWS! Ich arbeite mit der Open Source Version unter Windows.
Mehr wollte ich doch gar nicht wissen, du bearbeitest deinen Code ja direkt oder indirekt mit den Designer!

DAS GEHT HIER ABER NICHT.
Ich kann hier kein CODE bearbeiten! Dass muss ich extern in einen Editor machen oder sowas.
So wie du das machst will ich das ja auch machen, ich muss nur erstmal wissen was richtig ist, was der normale Ablauf ist. Ich dachte das haben die von Trolltech da aus QT rausgenommen.
Ich dachte ich muss ein externen Editor nehmen.

Das bedeutet entweder ist das ein Fehler oder die Funktion steht nicht zur Verfügung oder was weiss ich. Auf alle Fälle ist da was nicht richtig.

Mehr wollte ich doch gar nicht wissen :)

stefan-tiger
24-02-2006, 10:00
Achso, Windows, entschuldige. Keine Ahnung wie man dort einen Editor mit dem Degigner verknüpft.

Im Anhang mal wies bei mir aussieht.

Terror
24-02-2006, 10:56
Wollte halt unter Windows OS Programme mal schreiben, sollten aber auch eventuell unter Linux laufen, also mal von der Windowsschiene weg. :cool:

Da das Tool aber meistens von Leuten benutzt wird die Windows haben wollte ich zuerst mal ein Windowstool schreiben.
So sieht das unter Windows aus.

Bild1 (http://mitglied.lycos.de/terrorrs/Bild1.JPG)
Bild2 (http://mitglied.lycos.de/terrorrs/Bild2.JPG)
Bild3 (http://mitglied.lycos.de/terrorrs/Bild3.JPG)

Na da werde ich wohl doch wieder Linux installieren müssen. Das compilieren dürfte ja kein Problem sein, der Compiler ist MinGW der funzt einwandfrei.

Danke für deine Hilfe!

anda_skoa
24-02-2006, 13:44
Na Schwachsinn, weil dann kann ich gleich wieder wie anno 1970 im Texteditor programmieren. Wofür gibts denn eine IDE, kann nicht glauben dass man die wieder abschafft.


Welche IDE benutzt du denn?
Deinen bisherigen Fragen nach war eher zu entnehmen, daß du mit einem Codeeditor und Commandline Buildtools arbeitest.

Manchmal wird von neuen Entwickler auch irrtümlich angenommen, Qt Designer sei eine IDE, wozu leider TrollTech durch die Einfrührung des ui.h Hacks beigetragen hat.

Bei genauerem Hinsehen wird aber sehr schnell klar, daß das Programm, wie der Name schon andeutet, ein Interface Designer, ein Hilfmittel um visuell die GUI eines Programms zu erstellen.



Wenn ich dich richtig verstehe soll ich jetzt eine UI komplett erstellen mit 40 Button, Textboxen, Sliders, Group Button und so weiter, dann umwandeln mit in cpp und danach anfangen die Funktionen einzugeben.


Korrekt.
Man kann, wenn man die Signals&Slots gleich im Designer verbinden will, entsprechende Slots anlegen, verbinden und dann in der Subklasse überschreiben.
(Qt3-Style, bei Qt4 gibt es ja mehrer Ansätze)



Und wenn mir dann einfällt ich brauche noch 2 Button, wandle ich den ganzen Kram wieder um und frickeln mir den Code da zurecht?

Wenn die zwei neuen Buttons den Code der andere Elemente betreffen, wirst du nicht umhin kommen, auch dort Änderungen zu machen, unabhängig vom Ort der Codeeingabe.
Wenn die neuen Buttons nur neue Funktionalität sind, ändert sich auch beim Rest nichts.



Ergibt für mich kein Sinn. Und ich hoffe ich verstehe das Geschriebene jetzt richtig, dass ist der akutelle Weg in QT zu programmieren?

Der Weg hängt immer von der bevorzugten Arbeitsweise des Entwicklers ab.
Einige Qt Entwickler bevorzugen die Arbeit mit reinem Code, also keinerlei UI Generation, andere Benutzen zwar Designer für die Anordnung der Elemente aber machen Connections im Code, andere machen auch die Connections im Code und manchmal werden eigene Widgets sogar in eine Plugin transferiert, um sie auch im Designer benutzen zu können.

Bezüglich der Codeeingabe bevorzugen einige Entwickler die Arbeit mit IDEs, andere benutzen lieber einen der "Coder" Editoren

Ciao,
_