[gelöst] [QT4] Grundlagen

Verschiedenes zu Qt
Antworten
methusalem
Beiträge: 186
Registriert: 11. August 2005 08:21

[gelöst] [QT4] Grundlagen

Beitrag von methusalem »

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.
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:

Beitrag von FlorianBecker »

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.
methusalem
Beiträge: 186
Registriert: 11. August 2005 08:21

Beitrag von methusalem »

Moin,
FlorianBecker hat geschrieben:Der 4er Designer hat meiner bescheidenen Meinung nach nur noch Vorteile im Gegensatz zu Qt3.
Das glaube ich gerne!
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.
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?
Martin
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

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

Code: Alles auswählen

Form::Form {

  setupUi( this );
}
form.h:

Code: Alles auswählen

#include "ui_formwidget.h"

class Form : public QWidget, private Ui::FormWidget {

  public:
    Form();
...
}
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.
methusalem
Beiträge: 186
Registriert: 11. August 2005 08:21

Beitrag von methusalem »

Moin,
FlorianBecker hat geschrieben:auto-connection? Was ist das denn?
Damit meinte ich das, was hierhier diskutiert wurde.
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.
Absolute Zustimmung! Dieses Durcheinander bei QT3 ist wirklich gut gelößt worden. Auf diesem Wege habe ich sogar eine Trennung zwischen Layout und Logik!
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:

Beitrag von FlorianBecker »

Ja, das geht. Das hat aber nix mit Ui oder nicht Ui zu tun, das sollte laut Dokumentation in jedem x-beliebigen Fenster gehen.
methusalem
Beiträge: 186
Registriert: 11. August 2005 08:21

Beitrag von methusalem »

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.
:-) Ja is ja gut! Klar sollte das auch mit selbst erstellten Dialogen gehen. Ich war mir nur nicht sicher, ob das auch über die Vererbung hinweg klappt. Schließlich sind es ja Objekte der Klasse ui_formwidget.h, denen ich einen neuen Slot anhängen möchte. Diesen selbst geschriebenen Slot würde ich aber nach meinem bisherigen Verständniss in der form.h definieren und nicht in der ui_formwidget.h. Da diese ja bei der nächsten Änderrung der GUI überschrieben würde.
Martin
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Naja, aber eine Vererbung heißt bei Ui's immer, dass du dich wie in dem Ui selbst bewegen kannst. Und zwar wirklich genauso.
methusalem
Beiträge: 186
Registriert: 11. August 2005 08:21

[QT4] Grundlagen (erledigt!)

Beitrag von methusalem »

OK, Danke bis hier hin ...
Martin
Antworten