QT 4 uic Problem
-
Hallo alle zusammen,
kennt jemand eine Möglichkeit, dem uic mitzuteilen, dass er die setupUi und retranslateUi Methoden nicht inline, sondern in eine separate cpp Datei generieren soll?
Ich habe das Problem, dass meine GUI mittlerweile super umfangreich geworden ist. Die setupUi Methode ist mittlerweile 5000 Zeilen lang und der MinGW Compiler braucht ca. 45 Minuten, um meine Klasse (die ja diese sch... setupUi Methode erbt) zu übersetzen. Wenn ich die setupUi Methode in einer separaten cpp Datei hätte, würde der Compiler nur bei Änderungen in der Ui den Kram erneut übersetzen müssen.
Ich werde hier noch wahnsinnig...
Man wartet 45 Minuten, um sich dann vom Compiler sagen zu lassen, dass man sich vertippt hat (z.B. : statt
und darf nach Korrektur des Fehlers erneut 45 Minuten warten.....
Ich hoffe jemand von Euch hat eine Idee,
Gruß Paddy
-
Kann dir nicht direkt helfen, weil ich mich nicht mit QT auskenne.
Aber generell, eine Methode mit 5000 Zeilen deutet schon daraufhin das da was nicht stimmt im GUI Design.
Grundsätzlich arbeite ich in wxWidgets recht gerne mit Panels, welche sich auch wieder in andere Panels einhängen lassen.
So kann man dann den Code in Logische Einheiten aufteilen, und hat nicht eine Klasse die alle Steuerelemente enthält.
In QT müsste es auch möglich sein, die Steuerelmente auf verschiedene Klassen zu verteilen. (Notebooks können da auch eine Hilfe sein).phlox
-
Dass der Kompiler 45 Minuten für eine Methode mit 5000 Zeilen braucht, ist meiner Meinung nach sehr ungewöhnlich.
Kannst du mal die .ui Datei und ein minimales Programm irgendwo hinstellen?
-
Ich habe zum ersten Mal mit dem Designer gearbeitet und vorher die GUI's immer per Hand erstellt.
Ich nutze das so genannte stacked Widget und habe 13 Widget's in diesem.
Die 13 Widget's sind randvoll mit Groupboxes --> pushbuttons, checkboxes und radiobuttons.Ist ein Simulator, der mir eine TCP Schnittstelle simuliert. Darf ich leider nicht rausgeben....
Man kann sich das in etwa so vorstellen, dass es ein Schnittstellendokument gibt, in dem ca. 200 Telegramme beschrieben sind. In der GUI gibt es für jedes Telegramm eine Groupbox, in der man alle variablen Anteile des Telegramms eingeben und per Pushbutton absenden kann. Bei einigen gibt es noch eine Checkbox. Wenn diese angeklickt ist, wird das Telegram zyklisch gesendet (also das Signal zyklisch ausgelöst).
Die GUI soll nicht super schön sein, hauptsache sie erfüllt ihren Zweck.
Wie würdet ihr das machen?
-
Möglichst einfach *g*
Aber bei 200 Telegrammen ist es schon schwierig ein einfaches Design zu finden.
Evtl. erstmal Klassen für die Telegramme erstellen, da sie sicher Gemeinsamkeiten haben.
Evtl. in dieser Klasse auch noch Send, receive usw. als Methoden einbauen, bzw. die Klassenhierachie besuchbar machen. (macht sich schnell bezahlt, wenn man was "hinzufügen" muss)Dann in der GUI würde ich eine art NoteBook nehmen, aber statt Tabs eine ComboBox, Evtl. aber auch
eine TreeCtrl wählen, damit man die einzelnen Telegramme auswählen kann.
Für die Telegramme brauchst du dann natürlich noch entsprechende GUI Elemente, welches man ja dynamisch einfügen kann,
jenachdem welches Telegramm gerade ausgewählt wurde.
-
Wie Phlox sagte, man sollte das irgendwie aufteilen..
Im Designer gibts ne Funktion, die heißt "Promote to Custom Widget" (rechtscklick auf ein Widget). Da Kannst du dann dein Stacked Widget machen und darin noch ein anderes (ist Wurst, welches). Dieses promotest du dann zu nem eigenen. Das eigene kannst du dann selber implementieren (von mir aus auch mit Hilfe des Designers. Wenn du das geschickt (eventuell mit Vererbung) machst, kann man vielleicht nur ein Subwidget mit dem Designer machen (wartungsfreundlich).
Naeheres: http://doc.trolltech.com/4.2/designer-using-custom-widgets.html#promoting-widgetsOder du kannst direkt das Stacked Widget im eigenen Code mit eigenen Widgets befuellen (die auch wieder Designer basiert sein koennen). Das ist mein persoenlicher Favorit (heißt aber nicht viel).
Eine weitere moeglichkeit ist, dass du nicht von der Ui Klasse erbst, sondern ein Objekt davon erstellst und ueber dieses auf die Elemente zugreifst.. (wie ich finde, die schlechteste aber im ersten Augenblick einfachste Loesung)
Naeheres: http://doc.trolltech.com/4.2/designer-using-a-component.html#the-direct-approachIch hoffe, dass ich jetzt keinen Stuss geschrieben hab, ist ja schon nach 1 in der Nacht..