Seite 1 von 1

2 x QAction im Menu: Slot mit Parameter aufrufen

Verfasst: 30. Juli 2009 16:38
von shapoc
Hallo zusammen,

ich habe ein Brett vorm Kopf und komm nich weiter :-( ! Folgendes Problem:

Ich möchte im Menu zwei Menueinträge haben, die jeweils einen Zustand setzen (ein Flag, bool, sonstwas).
Dafür dachte ich mir, definier ich einen Slot, der das dann setzt, und weise beiden Menueinträgen diesen Slot zu. Diesem Slot wollte ich halt einen Parameter mitgeben, damit ich weiß welcher Eintrag geklickt und dementsprechend welcher Zustand gesetzt werden soll.

Den einfachen Fall mit slot ohne Parameter hab ich, funktioniert auch:

Code: Alles auswählen

connect(openAct, SIGNAL(triggered()), this, SLOT(open()));
Wie krieg ich das nun hin, dass ich abhängig vom Menueintrag den gleichen Slot mit nem unterschiedlichen Parameter aufrufe? Oder muss ich doch zwei Slots dafür definieren?

Schonmal danke für eure Hilfe und Tipps!

Verfasst: 30. Juli 2009 17:38
von Strahlex
Schau dir doch mal QObject::sender() an...

Verfasst: 30. Juli 2009 18:08
von shapoc
Danke für den Tipp. Damit habe ich schonmal die Action. Aber wodurch kann ich diese unterscheiden? Habe versucht den QActions einen Text zu geben, aber vergeblich. Ich weiß nich woran ich erkenne, welche(!) QAction aus dem Menu der Auslöser war?

Verfasst: 30. Juli 2009 18:13
von upsala
QSignalMapper

Verfasst: 30. Juli 2009 18:46
von Strahlex
Für 2 Actions sollte der Name zum unterscheiden genügen, ansonsten QSignalMapper...

objectname

Verfasst: 1. August 2009 21:25
von Troll.Soft
shapoc hat geschrieben: Ich weiß nich woran ich erkenne, welche(!) QAction aus dem Menu der Auslöser war?
Jedem QObject kann man einen eigenen Namen zuweisen und abfragen.
QString objectName () const
void setObjectName ( const QString & name )

Das sollte Dein Problem lösen.
tschüß

Verfasst: 4. August 2009 10:58
von shapoc
Danke euch erstmal für die Antworten. Ich war etwas verwirrt, als ich im Debugger die einzelnen Vorschläge testen wollte. Für mein QObject::sender() hat er mir zwar mein Object angezeigt, aber wenn ich darauf dann z.b. objectName() aufrufen wollte, in der Überwachung im Debugger, sagt er mir dass er die Memberfunktion nich kennt :-( ! Habe durch zufall dann doch noch dahinter ne Ausgabe gehabt und siehe da: der Name wird korrekt ausgegen.

Es funktioniert also mit:

Code: Alles auswählen

	QObject* obj = QObject::sender();
	qDebug() << "Object is: " << obj->objectName();
wenn man dem Objekt vorher mit setObjectName() einen Namen zuweist!

Den QSingalMapper hab ich mir noch angeschaut, aber dann nicht weiter verfolgt, weils so auch funktioniert.

Aus Interesse: Hat jemand ne Ahnung, warum der Debugger das nich korrekt auflösen kann?

Verfasst: 4. August 2009 13:20
von Strahlex
Vielleicht musst du ja zuerst umwandeln:

Code: Alles auswählen

QAction *action = (QAction*)QObject::sender();

Verfasst: 4. August 2009 13:25
von shapoc
Ne, leider nich :-(