Dialogimplementierung mit Kdevelop

Alles rund um die Programmierung mit Qt
Antworten
alfonsospringer
Beiträge: 75
Registriert: 25. September 2007 20:03

Dialogimplementierung mit Kdevelop

Beitrag von alfonsospringer »

Ich versuche grade von QDevelop auf Kdevelop umzusteigen, weil QDevelop immer abstürzt. Das grundlegende Erzeugen eines Fensters, dass im Designer erstellt wurde klappt schon - aber ich verstehe noch nicht ganz wie die Implementierung funktioniert. Kennt sich jemand mit Kdevelop aus? Ich habe meine Form mittels dem Subclassing Wizzard subclassed und danach mit "Create or Select Implementation" auf die Subclass eine Implementation erstellt. Wenn ich nun in der main.cpp eine Instanz der neuen Klasse erstelle, sie anzeigen lasse und das Programm kompiliere klappt Alles und das Fenster wird richtig angezeigt. Nun möchte ich aber natürlich, dass meine Köpfe, etc. auch etwas bewirken, daher stellt sich mir die Frage, wie ich die gewünschten Slots in die Klasse bekomme. Bei QDevelop gabs ein Implement Menü, in dem alle Buttons, etc. mit allen möglichen Slots angezeigt wurden, aus dem man die Slots auswählen konnte, die man implementieren möchte. Wie geht das bei Kdevelop?

Danke schonmal
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Beitrag von -=Freaky=- »

du willst also im prinzip wissen, wie du in deine abgeleitete klasse slots bekomst?

Code: Alles auswählen

class MyClass: public MyDesignerDlg
{
  public slots:
    publicSlotOne()
    {
       // sonstwas tun
    }
};
dann connecten per connect (QObject::connect).

oder hab ich dich falsch verstanden?

mfg,
julian
alfonsospringer
Beiträge: 75
Registriert: 25. September 2007 20:03

Beitrag von alfonsospringer »

Ich hatte gehofft, dass man die Funktionen und die connects automatisch erzeugen lassen kann, sodass man selbst wirklich nur noch den Code schreiben muss, der ausgeführt wird, wenn ein Signal aktiviert wird. Geht das nicht?
alfonsospringer
Beiträge: 75
Registriert: 25. September 2007 20:03

Beitrag von alfonsospringer »

Angenommen, dass du ein Programm schreibst, in dem hunderte von Buttons drin sind: Müsstet du dann jeden Button einzeln mit connect an eine Funktion binden? Die Signal-Slot Funktion vom Designer hilft einem ja überhaupt nicht, wenn das Signal nicht direkt an einen Slot eines anderen Widgets gebunden werden soll, oder?
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Designer ist absolut NUR für das "Design" da. Jegliche Funktionalität musst du im Code machen. Natürlich erstellt dir der Designer auch ein paar Codezeilen... die sind aber nur Eigenschaften. Funktionalität musst du selbst implementieren, in dem du von der generierten Klasse eine neue Klasse ableitest. Steht soweit ich mich entsinne auch alles in der Designer-Anleitung.
alfonsospringer
Beiträge: 75
Registriert: 25. September 2007 20:03

Beitrag von alfonsospringer »

Das mag wohl sein. Ich habe grade etwas gefunden, was mir villeicht das Leben erleichten könnte:
void QMetaObject::connectSlotsByName ( QObject * object )
In der automatisch generierten ui_window.h wird diese Funktion bereits aufgerufen. Könnte ich villeicht in meiner abgeleiteten Klasse dann einfach Slots vom Typ void on_button1_clicked() einfügen? Wenn das ginge könnte man sich zumindest die ganzen connects ersparen...

zZ. liefert mir dieser Slot eine Fehlermeldung:
"window.cpp:24: error: function definition does not declare parameters"

Code: Alles auswählen

void window:on_button_clicked()
{
	button->setText("Hallo");
};
PeterLustig
Beiträge: 386
Registriert: 21. November 2007 20:07

Beitrag von PeterLustig »

Genau dafür ist das connectSlotsByName.. Die Slots werden anhand der Namen automatisch verbunden.

Und schau dir deinen Code nochmal genau an, besonders den (!) Doppelpunkt dort.
alfonsospringer
Beiträge: 75
Registriert: 25. September 2007 20:03

Beitrag von alfonsospringer »

Dankeschön ! Genau diese Dinge finde ich bei der Fehlersuche nie !!! :oops:
Antworten