Hört sich kompliziert an, ist aber eigentlich recht simpel :
Hauptmenü Toolbar Aufbau:
[1 Menua ^] [2 Menub] [3 Menuc ^] [4 Dynamisch ^]
Die Zahlen sind Shortcuts, Menua und Menuc haben Untermenüs, die in der Toolbar mit nem Pfeil gekennzeichnet und als Popup angezeigt werden.
"Dynamisch" wird folgendermaßen connected :
Code: Alles auswählen
void init()
{
QToolBar* tb_menu = new QToolBar(...);
// Initialisierung Toolbar, QActions aus der Menüleiste werden in die Toolbar 1zu1 übertragen, dann wird die Menüleiste versteckt.
connect(Dynamisch->menuAction(),SIGNAL(triggered(bool)),this,SLOT(slot_setDynamisch(bool)));
}
void slot_setDynamisch(bool)
{
tb_menu->clear();
for (int i = 0; i<buttonCount;i++)
{
QAction* action = new QAction(this);
action->setText(QString("%1 %2").arg(i+1).arg("Button"); // [1 Button] [2 Button] usw.
tb_menu->addAction(action);
}
QAction* exitAction = new QAction(this); //der Beenden Button um zum Hauptmenü zurückzukehren
exitAction->setText("0 Beenden");
connect(tb_menu,SIGNAL(actionTriggered(QAction*)),this,SLOT(slot_buttonFilter(QAction*)));
}
Code: Alles auswählen
void slot_buttonFilter(QAction* button)
{
QString number = QString::null;
if(button)
{
number = button->text().section(" ",0,0);
}
if(number.compare("0")!=0)
{
printf("Nummer %s\n",number.toLatin1().data());
//tu was damit !
}
else
{
disconnect(tb_menu,SIGNAL(actionTriggered(QAction*)),this,SLOT(slot_buttonFilter(QAction*)));
//Hauptmenü wiederherstellen
}
}
Die letzte Ausgabe "Nummer 4" ist einfach falsch, weil das Signal über das Hauptmenü kommt und vorher ja über "Beenden" disconnected wurde. Die Ausgaben dürften nur im Untermenü kommen. Wenn ich die anderen Menüpunkte im Hauptmenü aktiviere passiert nix, das disconnect scheint da zu funktionieren, nur wenn ich "Dynamisch" aktiviere, geht sofort das Klick-Signal durch und ruft den Filter auf, obwohl ich noch keine Taste im Untermenü gedrückt habe. Und das passiert aber erst, wenn ich zum 2. Mal auf den Menüpunkt gehe. Beim ersten Aufruf funktioniert es. Das sieht so aus, als ob das Signal eben weiterhin anliegt. Wie kann ich das vorher löschen, bzw. den Zustand wie zum ersten Aufruf wiederherstellen ?[1 Menua ^] [2 Menub] [3 Menuc ^] [4 Dynamisch ^]
<< klick [4 Dynamisch]
[1 Button] [2 Button] [3 Button] ... [0 Beenden]
<< klick [2 Button]
>> Nummer 2
<< klick [3 Button]
>> Nummer 3
<< klick [0 Beenden]
[1 Menua ^] [2 Menub] [3 Menuc ^] [4 Dynamisch ^]
<< klick [4 Dynamisch]
>> Nummer 4
[1 Button] [2 Button] [3 Button] ... [0 Beenden]
mfg
MB