Hallo Forum,
dieser Code hier funktioniert wenn ich das durch Drücken eines Buttons aufrufen lassen:
QPushButton *tempButton = static_cast<QPushButton*>(this->sender());
QString meintext = (tempButton->text());
Wenn ich es durch meine init() aufrufen lassen, verständlicherweise nicht.
qDebug() << this->sender(); sagt QObject(0x0) wenn aus init() heraus aufgerufen, und
QPushButton(0x9b756e0, name = "pushButton_zurueck") wenn über den Button gerufen.
Ich denke, ich muss prüfen, ob this->sender ein Button ist, und wenn nicht den Text auf leer setzten, sonst den vom tempButton nehmen. Wie macht man sowas am Besten?
Grüße
Roland
Typvergleich this->sender [gelöst]
Typvergleich this->sender [gelöst]
Zuletzt geändert von rvb am 24. März 2011 11:30, insgesamt 1-mal geändert.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Sorry, ich versteh Deine Antwort nicht, was sind da die Unterschiede?
Aber ich glaube, das ist garnicht mein Problem, denn der Rest der Funktion funktioniert mit static_cast wunderbar, ich muss nur abbrechen und einen Text setzen wenn die Funktion aus init() aus gerufen wird. Daher dachte ich reicht es zu prüfen, vom welchem Typ der Sender ist.
Aber ich glaube, das ist garnicht mein Problem, denn der Rest der Funktion funktioniert mit static_cast wunderbar, ich muss nur abbrechen und einen Text setzen wenn die Funktion aus init() aus gerufen wird. Daher dachte ich reicht es zu prüfen, vom welchem Typ der Sender ist.
Grundlagen, schau in deinem Buch nach, was einen static_cast von einem dynamic_cast unterscheidet, und wo qobject_cast (->Qt-Doku) einzuordnen ist.rvb hat geschrieben:Sorry, ich versteh Deine Antwort nicht, was sind da die Unterschiede?
Warum brauchst du denn den sender()? Und was für eine init()? In C++ hat man Konstruktoren.ich muss nur abbrechen und einen Text setzen wenn die Funktion aus init() aus gerufen wird. Daher dachte ich reicht es zu prüfen, vom welchem Typ der Sender ist.
Ansonsten: 0x0 sagt dir, das ist ein NULL-Pointer, es gibt also keinen sender(). EInfach auf sender()==0 prüfen.
sender() solllte man aber nicht verwenden, schau mal in RIchtung QSignalMapper.
Warum init? Weil ich einige Parameter an unterschiedlichen Stellen setzen muss. Das macht sich einfach besser wenn man das zentral aufruft und nicht in hunderten von Konstruktoren verteilt.
Warum sender? Macht sich in dem Fall am Einfachsten, ich binde diese Funktion an eine Handvoll Buttons, und abhängig von der Beschriftung passiert etwas (es wird an der Stelle auch keine Internationalisierung geben, die Texte bleiben immer gleich), das Problem war nur, dass ich die Funktion zur Bevölkerung einmal ohne Button als Sender aufrufen musste. Aber so ist das schon gut.
Also grosses Danke, damit wärs Problem gelöst, manchmal sieht man den Wald vor lauter Bäumen nicht
Warum sender? Macht sich in dem Fall am Einfachsten, ich binde diese Funktion an eine Handvoll Buttons, und abhängig von der Beschriftung passiert etwas (es wird an der Stelle auch keine Internationalisierung geben, die Texte bleiben immer gleich), das Problem war nur, dass ich die Funktion zur Bevölkerung einmal ohne Button als Sender aufrufen musste. Aber so ist das schon gut.
Also grosses Danke, damit wärs Problem gelöst, manchmal sieht man den Wald vor lauter Bäumen nicht