[gelöst] Slots im Qt 4 Designer

Alles rund um die Programmierung mit Qt
Antworten
Danzl Gerhard
Beiträge: 1
Registriert: 7. Juli 2005 08:24

[gelöst] Slots im Qt 4 Designer

Beitrag von Danzl Gerhard »

Hallo!

Ich finde keine Möglichkeit im Signal/Slot Editor vom Qt4 Designer win eigene Slots zu definieren.
Danke Gerhard
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: Slots im Qt 4 Win Designer

Beitrag von macman »

Danzl Gerhard hat geschrieben:Ich finde keine Möglichkeit im Signal/Slot Editor vom Qt4 Designer win eigene Slots zu definieren.
Die gibt es auch nicht mehr. Ich erstelle sie von Hand im Konstruktor, gleich nach setupUi(). Du kannst deine Slots aber auch nach der Namenskonvention on_widgetname_signal benennen, dann werden die Connections automatisch angelegt.
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

Beitrag von ArneStocker »

Die gibt es auch nicht mehr
heisst das ich muss alle meine Widgets, für die ich Slots im Designer erstellt habe, nachbauen ? Da kommt 'ne Menge Fleissarbeit zusammen. Bei mir heissen die Slots nämlich nicht

on_widgetname_signal.

sondern meistens OnWidgetnameSignal

und auch das eben nur meistens.

Ich habe mir Qt4.0 noch nicht gezogen (nur ein bisschen die Vorschau angesehen) und weiss nicht, wie da was funktioniert, aber im Hinblick auf bestehenden Code finde ich den Gedanken an eine Umstellung doch etwas gruselig.

Gruss Arne
cbrider
Beiträge: 17
Registriert: 8. Juli 2005 00:45

Und wie läuft das nun genau ?

Beitrag von cbrider »

@macman

In welchem Konstruktor erstellst du die denn ?

MSVC 6.0 erzeugt ja für jeden ui-Dialog eine Implementierungklasse. In dieser wurden ja bisher die im Qt-Designer erstellten Slots virtuell überladen.

Hab das auch mit "on_widgetname_signal" versucht und hat leider nicht gefunzt diese in der Implementierungsklasse anzusprechen.
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

ArneStocker hat geschrieben:heisst das ich muss alle meine Widgets, für die ich Slots im Designer erstellt habe, nachbauen ?
Deswegen mußt Du keine Widgets nachbauen. Ich habe einfach die connect(..) Zeilen aus dem alten Qt3 Quellcode, welche von uic erstellt wurden, kopiert und in den Konstruktor der Implementierungsklasse kopiert. Wichtig ist nur das man die Slots auch als Slots deklariert, was vorher ja nicht nötig war, da das nur überschriebene Methoden waren.
ArneStocker hat geschrieben:aber im Hinblick auf bestehenden Code finde ich den Gedanken an eine Umstellung doch etwas gruselig.
Ist es auch. Ich weiß heute noch nicht wie ich manche Sachen anstellen soll. Ich habe das Gefühl das die Trolls ein paar Sachen einfach vergessen haben. Z.B. gibt es wohl keine Möglichkeit mehr Menüs mit einem Index zu versehen und über den anzusprechen :(

Wenn man sich dann noch anschaut was sich die Trolls für die 4.0.1 vorgenommen haben, dann dauert das wohl noch ein bißchen. Guckst Du hier
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Re: Und wie läuft das nun genau ?

Beitrag von macman »

cbrider hat geschrieben:MSVC 6.0 erzeugt ja für jeden ui-Dialog eine Implementierungklasse. In dieser wurden ja bisher die im Qt-Designer erstellten Slots virtuell überladen.
Genau, und in den Konstruktor packe ich die connect(...) Zeilen, die vorher in der von uic generierten Datei waren.
cbrider hat geschrieben:Hab das auch mit "on_widgetname_signal" versucht und hat leider nicht gefunzt diese in der Implementierungsklasse anzusprechen.
Hast Du sie auch in der Headerdatei von private: nach private slots: verschoben? Ein Fehler den ich gerne machte.
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

Beitrag von ArneStocker »

Ich habe einfach die connect(..) Zeilen aus dem alten Qt3 Quellcode, welche von uic erstellt wurden, kopiert und in den Konstruktor der Implementierungsklasse kopiert.
Ich habe manchesmal direkt connect verwendet (da bin ich mit mir im reinen) und manches mal (frag jetzt nicht warum) den Designer verwendt und die Methode abgeleitet. Da es aber eine Menge Dialog sind bleibt es fleissarbeit und dann muss man ja auch nochmal die ganze Applikation durchprüfen, ob nicht doch irgend ein Slot nicht funktioniert. Das mit dem Kopieren aus der Basisklasse ist eine gute Idee, da kann man sich vor allem nicht bei den Signals oder Slots vertippen (was einem der Compiler erst mal nicht meldet). Und mit Debug infos werde ich immer so zugeballert, dass ich keine Lust habe die Warnings da rauszusuchen.

Z.B. gibt es wohl keine Möglichkeit mehr Menüs mit einem Index zu versehen und über den anzusprechen :(
Ich hoffe sie haben wenigstens die Möglichkeit beibehalten, Menüs einen Parameter mitzugeben.

Was mir (beim lesen) aufgefallen ist, ist die vollständige Änderung der Sichten mit QListView (nicht mehr einfach ein QListViewItem reinwerfen). Das ist zwar ganz praktisch, führt jedoch bei Änderungen zu einer Menge arbeit. Allerdings werde ich da nicht so viel Arbeit haben, weil ich mir vorher eine Controlklasse gebaut hatte, in die ich einfach meine Objekte reingeschmissen habe.

Gruss Arne
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

ArneStocker hat geschrieben:Ich habe manchesmal direkt connect verwendet (da bin ich mit mir im reinen)
Oft geht es gar nicht anders, vor allem wenn man dynamisch TabPanels erstellt.
ArneStocker hat geschrieben:Da es aber eine Menge Dialog sind bleibt es fleissarbeit und dann muss man ja auch nochmal die ganze Applikation durchprüfen, ob nicht doch irgend ein Slot nicht funktioniert.
Richtig, und wenn Du mal anfängst den Qt3-Wrapper weg zu lassen, um die einzelnen Befehle anzupassen, dann wird es erst richtig lustig. Es läßt sich zwar viel mit Search&Replace erledigen, aber für einiges gibt es einfach kein Equivalent. Das muß komplett anders programmiert werden, wie eben die Model/View Geschichte. Da gehe ich aber nur bei, wenn ich mal nichts anderes zu tun habe.
ArneStocker hat geschrieben:Ich hoffe sie haben wenigstens die Möglichkeit beibehalten, Menüs einen Parameter mitzugeben.
Nö, sieht nicht so aus. Menüs setzen sich jetzt aus QActions zusammen, auch ein Punkt der komplett anders ist. Ich habe noch keine Möglichkeit gefunden an den Pointer für ein QAction zu kommen, wenn das Menü nicht aktiv ist. Werde mal den Support fragen und wenn es nicht geht, ist das ein Punkt für einen weiteren Verbesserungsvorschlag.
cbrider
Beiträge: 17
Registriert: 8. Juli 2005 00:45

Beitrag von cbrider »

Danke für eure Hilfen,

aber sagt doch mal ehrlich, den Qt-Designer hätte man doch so lassen können wie er war. OK die Verwendung der *.ui.h Dateien war schon ein bisschen wirsch aber man konnte sich dran gewöhnen.
Die Neuerungen innerhalb der Klassen und der Klassenstruktur sind ja genial, aber wie gesagt: "Ich vermisse meinen QtDesigner3" :?
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

cbrider hat geschrieben:aber sagt doch mal ehrlich, den Qt-Designer hätte man doch so lassen können wie er war.
Also der neue hat schon seine Vorteile, das nachträgliche einfügen in Layouts, das herstellen von Standardconnections, und die bessere Integration in VS.Net. Wenn das in KDevelop ähnlich gelöst ist, dann sehe ich das als Vorteil. Allerdings verwundert mich die unterschiedliche Darstellung meiner Dialoge zwischen Standalone Designer und der integrierten Version.

Es gibt aber auch einiges was ich vermisse, das erstellen von eigenen Slots und das benamen von Layouts und Spacern, z.B. Von den Menüs und Fenstern red ich erst gar nicht :) Ich sehe es als Potential für Verbesserungen, die sicherlich noch kommen werden. Man schaue nur auf den Tasktracker, was da alles für die 4.0.1 geplant ist.
Antworten