[gelöst] [QT4] Grundlagen
-
methusalem
- Beiträge: 186
- Registriert: 11. August 2005 08:21
[gelöst] [QT4] Grundlagen
Moin zusammen,
ich habe vor einiger Zeit mal mit QT in der Version 3 gearbeitet. Nun möchte ich mir mal die neue Version 4 ansehen und muss feststellen, das sich doch einiges geändert hat.
Beim 3er Designer konnte man ja noch Code eingeben und eigene Slots definieren. Das scheint wohl grundsätzlich nicht mehr möglich zu sein. Wenn ich das richtig verstanden habe, wird für eigene Slots nun entweder diese automatische connectierung "on_name_signal()" genutzt, oder man muss es komplett zu Fuß machen. Ist das richtig?
Außerdem bilde ich mir ein, das ich im 3er Designer Menüs in mein MainWindow einbauen konnte. Im neuen Designer finde ich kein Widget für das Menü. Kann es sein, das dies auch nur noch zu Fuß über die Sourcen geht?
Wie ist den in der 4er Version der Ablauf von der *.ui zur Source. Ich hab den Vorgang von füher nicht mehr im Kopf. Es waren aber mehrere Zwischenschritte (moc und uic hießen die glaube ich), die da gemacht wurden. Hat sich da was geändert? Bei einer Testapplikation war nach dem make eine ui_xyz.h erstellt worden. Aber keine passende *.cpp. Dafür war in dieser *.h eine Methode setupUI(), die ich eigentlich in einer *.cpp erwartet hätte.
Ich bin verwirrt. Gibts irgendwo ne kurze Übersicht zu den ganzen Fragen? Ich habs mit dem QTAssist versucht. Aber ich bin nicht wirklich schlauer geworden.
Wäre nett, wenn ihr beim Neueinstieg helfen könntet.
ich habe vor einiger Zeit mal mit QT in der Version 3 gearbeitet. Nun möchte ich mir mal die neue Version 4 ansehen und muss feststellen, das sich doch einiges geändert hat.
Beim 3er Designer konnte man ja noch Code eingeben und eigene Slots definieren. Das scheint wohl grundsätzlich nicht mehr möglich zu sein. Wenn ich das richtig verstanden habe, wird für eigene Slots nun entweder diese automatische connectierung "on_name_signal()" genutzt, oder man muss es komplett zu Fuß machen. Ist das richtig?
Außerdem bilde ich mir ein, das ich im 3er Designer Menüs in mein MainWindow einbauen konnte. Im neuen Designer finde ich kein Widget für das Menü. Kann es sein, das dies auch nur noch zu Fuß über die Sourcen geht?
Wie ist den in der 4er Version der Ablauf von der *.ui zur Source. Ich hab den Vorgang von füher nicht mehr im Kopf. Es waren aber mehrere Zwischenschritte (moc und uic hießen die glaube ich), die da gemacht wurden. Hat sich da was geändert? Bei einer Testapplikation war nach dem make eine ui_xyz.h erstellt worden. Aber keine passende *.cpp. Dafür war in dieser *.h eine Methode setupUI(), die ich eigentlich in einer *.cpp erwartet hätte.
Ich bin verwirrt. Gibts irgendwo ne kurze Übersicht zu den ganzen Fragen? Ich habs mit dem QTAssist versucht. Aber ich bin nicht wirklich schlauer geworden.
Wäre nett, wenn ihr beim Neueinstieg helfen könntet.
Zuletzt geändert von methusalem am 11. August 2005 11:52, insgesamt 1-mal geändert.
Martin
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
Der 4er Designer hat meiner bescheidenen Meinung nach nur noch Vorteile im Gegensatz zu Qt3.
Du bindest nur noch Header ein, es muss kein eigene Designer Quelltext kompiliert werden. Es gibt mehrfache Vererbung, die unter Qt diese Probleme lösen.
Sicher hat Qt4 noch einige komische API, aber das wird jetzt von Version zu Version besser. Was mir vor allem fehlt ist die Dynamik der Typen, die in Qt4 eben nur über Umwege geht, z.B. QString in einen const char *.
Für einen Qt3 Programmierer gibt es die Dokumentation für die Portierung, die du dir ansehen solltest. Entwickle im Kopf Qt3 und gucke auf die Portierungsanleitung und lerne die Klassen neu.
Einen wirklichen Unterschied gibt es zum programmieren nicht.
Du bindest nur noch Header ein, es muss kein eigene Designer Quelltext kompiliert werden. Es gibt mehrfache Vererbung, die unter Qt diese Probleme lösen.
Sicher hat Qt4 noch einige komische API, aber das wird jetzt von Version zu Version besser. Was mir vor allem fehlt ist die Dynamik der Typen, die in Qt4 eben nur über Umwege geht, z.B. QString in einen const char *.
Für einen Qt3 Programmierer gibt es die Dokumentation für die Portierung, die du dir ansehen solltest. Entwickle im Kopf Qt3 und gucke auf die Portierungsanleitung und lerne die Klassen neu.
Einen wirklichen Unterschied gibt es zum programmieren nicht.
-
methusalem
- Beiträge: 186
- Registriert: 11. August 2005 08:21
Moin,
Das glaube ich gerne!FlorianBecker hat geschrieben:Der 4er Designer hat meiner bescheidenen Meinung nach nur noch Vorteile im Gegensatz zu Qt3.
Was meinst du damit? Von QT wird aus der ui eine Header Datei erstellt. Wenn ich nun in dieser Form noch etwas programmieren möchte, sollte ich dann eine Klasse von dieser generierten QTDesigner-Klasse ableiten? Kann ich in dieser abgeleiteten Klasse dann trotzdem diesen auto-connection Mechanismus nutzen?Du bindest nur noch Header ein, es muss kein eigene Designer Quelltext kompiliert werden. Es gibt mehrfache Vererbung, die unter Qt diese Probleme lösen.
Martin
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
auto-connection? Was ist das denn?
Naja, stell dir vor, du hast eine formwidget.ui Datei, dann erstellst du eine form.h und eine form.cpp wie folgt:
form.cpp
form.h:
Die Datei ui_formwidget.h wird automatisch erstellt und du hast eine abgeleitete Klasse von deinem FormWidget.
Also wenn das nicht einfach ist.
Bei Qt3 gab es dann formwidget.h, formwidget.cpp und formwidget_moc.cpp, die alle kompiliert werden mussten. Bei Qt4 wird ui_formwidget.h incl. der Sourcen bereitgestellt und direkt in die abgeleitete Klasse mit aufgenommen. Wesentlich einfacher.
Naja, stell dir vor, du hast eine formwidget.ui Datei, dann erstellst du eine form.h und eine form.cpp wie folgt:
form.cpp
Code: Alles auswählen
Form::Form {
setupUi( this );
}Code: Alles auswählen
#include "ui_formwidget.h"
class Form : public QWidget, private Ui::FormWidget {
public:
Form();
...
}Also wenn das nicht einfach ist.
Bei Qt3 gab es dann formwidget.h, formwidget.cpp und formwidget_moc.cpp, die alle kompiliert werden mussten. Bei Qt4 wird ui_formwidget.h incl. der Sourcen bereitgestellt und direkt in die abgeleitete Klasse mit aufgenommen. Wesentlich einfacher.
-
methusalem
- Beiträge: 186
- Registriert: 11. August 2005 08:21
Moin,
Und wenn jetzt in der abgeleiteten Klasse noch das erstellen eigener Slots mit dem Syntax
funktioniert, werde ich heute abend mal etwas ausführlicher experimentieren!
Damit meinte ich das, was hierhier diskutiert wurde.FlorianBecker hat geschrieben:auto-connection? Was ist das denn?
Absolute Zustimmung! Dieses Durcheinander bei QT3 ist wirklich gut gelößt worden. Auf diesem Wege habe ich sogar eine Trennung zwischen Layout und Logik!Naja, stell dir vor, du hast eine formwidget.ui Datei, dann erstellst du eine form.h und eine form.cpp wie folgt:
...
Die Datei ui_formwidget.h wird automatisch erstellt und du hast eine abgeleitete Klasse von deinem FormWidget.
Also wenn das nicht einfach ist.
Und wenn jetzt in der abgeleiteten Klasse noch das erstellen eigener Slots mit dem Syntax
Code: Alles auswählen
void on_WidgetName_SignalName()funktioniert, werde ich heute abend mal etwas ausführlicher experimentieren!
Martin
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
-
methusalem
- Beiträge: 186
- Registriert: 11. August 2005 08:21
FlorianBecker hat geschrieben:Ja, das geht. Das hat aber nix mit Ui oder nicht Ui zu tun, das sollte laut Dokumentation in jedem x-beliebigen Fenster gehen.
Martin
-
FlorianBecker
- Beiträge: 1213
- Registriert: 2. Dezember 2004 10:54
- Kontaktdaten:
-
methusalem
- Beiträge: 186
- Registriert: 11. August 2005 08:21