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
Wieso funktioniert der SLOT nicht
Wieso funktioniert der SLOT nicht
- Dateianhänge
-
- sort.zip
- (19.66 KiB) 133-mal heruntergeladen
-
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
@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".
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".
Den habe ich mit dem Designer erstellt - sorry ich dachte der würde im Code irgendwo auftauchenUnd wo kommt moreButton überhaupt her?
... 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:Wie soll da was passieren wenn kein connect() vorhanden ist?
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.
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.Hab einfach in der cpp des sortdialog.cpp den Text des Buttons nochmal explizit gesetzt.
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");
}
}