2 x QAction im Menu: Slot mit Parameter aufrufen

Alles rund um die Programmierung mit Qt
Antworten
shapoc
Beiträge: 33
Registriert: 31. Mai 2009 12:18

2 x QAction im Menu: Slot mit Parameter aufrufen

Beitrag 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!
Strahlex
Beiträge: 158
Registriert: 23. Dezember 2008 15:49
Wohnort: Österreich

Beitrag von Strahlex »

Schau dir doch mal QObject::sender() an...
shapoc
Beiträge: 33
Registriert: 31. Mai 2009 12:18

Beitrag 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?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

QSignalMapper
Strahlex
Beiträge: 158
Registriert: 23. Dezember 2008 15:49
Wohnort: Österreich

Beitrag von Strahlex »

Für 2 Actions sollte der Name zum unterscheiden genügen, ansonsten QSignalMapper...
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

objectname

Beitrag 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üß
shapoc
Beiträge: 33
Registriert: 31. Mai 2009 12:18

Beitrag 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?
Strahlex
Beiträge: 158
Registriert: 23. Dezember 2008 15:49
Wohnort: Österreich

Beitrag von Strahlex »

Vielleicht musst du ja zuerst umwandeln:

Code: Alles auswählen

QAction *action = (QAction*)QObject::sender();
shapoc
Beiträge: 33
Registriert: 31. Mai 2009 12:18

Beitrag von shapoc »

Ne, leider nich :-(
Antworten