[gelöst] Qt: QComboBox-Signal nur bei Benutzeraktion
-
Hallöchen,
und wieder einmal habe ich ein kleines Problemchen.
Ich habe eine QComboBox, aus der ich (wie kann es anders sein) verschiedene Elemente auswählen möchte.
Allerdings soll der entsprechende Slot nur benachrichtigt werden, wenn der Benutzer eine neue Auswahl trifft.
Da die Elemente der ComboBox zur Laufzeit verändert werden, scheidet das Signal "currentIndexChanged()" aus.
"activated()" ist wohl auch nicht das passende Signal, da das ja immer ausgelöst wird wenn die Combobox geöffnet wird, auch wenn keine neue Auswahl getroffen wird.Zusammengefasst:
Ich brauche eine Methode/Signal, die/das ausschließlich dann getriggert wird, wenn der Benutzer ein neues(!) Element auswählt.Habt ihr eine Idee, wie ich das lösen kann?
Viele Grüße
Cherup
-
Doch, du musst es über currentIndexChanged machen. Normalerweise würde man in userData Rolle des Elements irgendwas speichern, z.B. eine ID oder einen Zeiger auf dein Objekt, mit dem du dann weiterarbeiten kannst.
Ob currentIndexChanged auch ausgelöst wird, wenn der Benutzer wieder das gleiche Element ausgewählt hat, bin ich mir grad nicht sicher. Wahrscheinlich aber schon. Musst dir halt selber merken, welches Element vorher ausgewählt war und das vergleichen. Oder es ist für den Code evtl. egal, ob sich die Auswahl geändert hat oder nicht.
-
Ok, danke für deine Antwort.
Hatte gehofft, dass es ein Signal ähnlich dem "textEdited()" bei QLindeEdit gibt, das nur bei Benutzereingaben ausgelöst wird und ich das nur übersehen habe.Hab das jetzt gelöst, indem ich ein bool Flag setze, wenn ich vom Code her an der ComboBox was mache. Der Slot wird dann zwar angesprungen, aber der Code wird nur verarbeitet, wenn das Flag nicht gesetzt ist (also false).
Du hattest auch mit dem Recht, das es dem Code relativ egal ist, ob die gleiche Auswahl gewählt wird. Bedeutet nur, das etliche Codezeile unnötig durchgegangen werden, wirkt sich aber nicht merkbar aus.
Viele Grüße
Cherup
-
Es gibt auch QObject::blockSignals, kann man vielleicht statt dem bool Flag benutzen.