Du schreibst ich solle das QMenu kicken, aber ich hätte das schon gerne im Button eingebettetk, denn es sollen ja mehrere Optionen bei Buttonclick vorhanden sein.
Zusammen bekomme ich das irgendwie nicht gehandelt, vorallem da die Actions dann trotzdem in einer Liste vorhanden sein müssten.
Die Problematik ist folgende: Es sind X Elemente, die alle den selben Button mit dem selben Menü haben sollen. X ist hierbei dynamisch, sprich es kann zur Laufzeit verändert werden.
Die Menüitems sollen dann immer ein und die gleich Funktion mit unterschiedlichen Parametern aufrufen - basierend auf den Button bei dem das Menüitem geklickt worden ist.
Der QSignalMapper scheint eine gute Option dafür zu sein, jedoch versagt er auf der Strecke. Denn mit den vorhanden Methoden kommt man meines Erachtens nicht weit.
Code: Alles auswählen
int i = 0;
QPushButton *my1Button = new QPushButton( QString::number(i), this );
QMenu *myMenu = new QMenu;
my1Button ->setMenu( myMenu );
QAction *myFirstAction= new QAction( myMenu );
QString myText = "Schön";
QSignalMapper *myMenuMapper = new QSignalMapper(this);
connect (myFirstAction, SIGNAL( toggled() ), myMenuMapper, SLOT( map() ) );
myMenuMapper->setMapping( myFirstAction, myText );
connect( myMenuMapper, SIGNAL( mapped(const QString &) ), this, SIGNAL( getTheSenderVal(const QString &) ) );
//---\\
int i = 1
QPushButton *my2Button = new QPushButton( QString::number(i), this );
...
//Und jetzt? Bräuchte ich ein weiteres QMenu und weiter QActions, die erstellt werden müssten.. sinnlos -.-
Zum einen kann ich in diesem Fall das vorhandene Mapping für den QSignalMapper nicht aufheben, oder? Soetwas wie myMenuMapper->removeMapping(myFirstAction) gibt es nämlich nicht ..
Zum anderen ist der QSignalMapper nur für Komponenten gedacht die mehrfach vorhanden sind. Nun und da ich ja gerne nur ein QMenu mit insgesamt zwei verschiedenen QActions haben will fällt QSignalMapper aus dem Rahmen. Denn dann müsste ich bei jedem Buttonclick ein anderes QMenu öffnen ODER das vorhandene QMenu mit den anderen QActions ersetzen. UND das klingt wirklich nach einem Workaround.