Seite 1 von 1
Wieso funktioniert der SLOT nicht
Verfasst: 23. April 2007 20:40
von getit
Hi,
hab mir das Listing im Anhang aus dem Buch "C++ GUI Programmierung mit Qt4" abgeschrieben und mir dann selber noch den SLOT "on_moreButton_clicked()" geschrieben.
Nur funktioniert der SLOT nicht so wie er soll.
Einfach mal anschauen und helfen

Verfasst: 23. April 2007 21:09
von Christian81
Wie soll da was passieren wenn kein connect() vorhanden ist?
Und wo kommt moreButton überhaupt her?
Verfasst: 23. April 2007 21:15
von caligano
@getit:
Du hast vergessen die .ui-Datei mit ins Archiv zu packen, deswegen kann man den Quelltext so nicht ganz nachvollziehen!
Ich vermute, dass beim ersten Klick auf den moreButton dieser einen anderen text() zurückliefert als "More", und deswegen wird dann der Text auf "More" gesetzt; ab dem 2ten Klick funktioniert ja dann das Verändern des Textes, wenn auch nur "phasenverschoben".
Verfasst: 23. April 2007 21:19
von getit
Und wo kommt moreButton überhaupt her?
Den habe ich mit dem Designer erstellt - sorry ich dachte der würde im Code irgendwo auftauchen
Wie soll da was passieren wenn kein connect() vorhanden ist?
... Nach der Erstellung der Benutzerschnittstelle verbindet setupUi() alle Slots, die der Namenskonvention on_objectName_signalName() folgen, mit dem entsprechenden signalName()-Signal von objectName. In unserem Beispiel bedeutet dies, dass setupUi() die folgende Signal/Slot-Verbindung einrichtet:
connect(moreButton, SIGNAL(clicked()), this, SLOT(on_moreButton_clicked()));
Und das die SIGNAL/SLOT-Verbindung da ist, sieht man ja wenn man die exe Mal ausprobiert. Nur funktioniert diese nicht wie gewünscht.
Verfasst: 23. April 2007 21:23
von getit
Anbei die ui-Datei
Verfasst: 26. April 2007 15:50
von getit
Ich habs rausbekommen
Hab einfach in der cpp des sortdialog.cpp den Text des Buttons nochmal explizit gesetzt.
Anbei das komplette Listing
Verfasst: 26. April 2007 16:02
von caligano
Hab einfach in der cpp des sortdialog.cpp den Text des Buttons nochmal explizit gesetzt.
Das ist unnötig, wenn du dir im Designer mal anschaust, welchen Text du dem Button gegeben hast, nämlich:
&More; du prüfst aber später ob der Text
More lautet.
Wenn du also das
&-Zeichen im Code einfügst, funktioniert auch alles wie gewollt!
Code: Alles auswählen
void SortDialog::on_moreButton_clicked(){
if (moreButton->text() == "&More"){
moreButton->setText("Less");
} else {
moreButton->setText("&More");
}
}
Verfasst: 26. April 2007 18:51
von getit
Danke
