[solved] QMenu::addAction funktioniert in if-clause nicht
Verfasst: 9. April 2013 17:30
Hallo,
ich realisiere gerade mein eigenes Popup-Menü, dazu verwende ich ein QMenu* Objekt (menu) und einen std::vector<QAction*> (actions).
Im Konstruktor meiner Klasse instanziiere ich dabei ganz normal das QMenu* Objekt.
Im weiteren Programmverlauf wird eine Funktion aufgerufen, welche als Parameter einen QString erhält.
Dieser wird vorher nach verschiedenen Kriterien ausgewertet und wenn notwendig, soll dann ein neues QAction* Objekt instanziiert
und als Element in den std::vector<QAction*> hinzugefügt werden.
Das Problem ist nur, das der Befehl QMenu::addAction(QAction*) in meiner if-clause nicht funktioniert, außerhalb allerdings schon!
Quellcodeschnippsel:
Wie ist das zu lösen?
Bedanke mich für sinnvolle Hilfe schon mal im Voraus.
ich realisiere gerade mein eigenes Popup-Menü, dazu verwende ich ein QMenu* Objekt (menu) und einen std::vector<QAction*> (actions).
Im Konstruktor meiner Klasse instanziiere ich dabei ganz normal das QMenu* Objekt.
Im weiteren Programmverlauf wird eine Funktion aufgerufen, welche als Parameter einen QString erhält.
Dieser wird vorher nach verschiedenen Kriterien ausgewertet und wenn notwendig, soll dann ein neues QAction* Objekt instanziiert
und als Element in den std::vector<QAction*> hinzugefügt werden.
Das Problem ist nur, das der Befehl QMenu::addAction(QAction*) in meiner if-clause nicht funktioniert, außerhalb allerdings schon!
Quellcodeschnippsel:
Code: Alles auswählen
// QAction* newAction = new QAction(name, this); // JUST FOR TESTING
if(!excist(name)) {
// ...
QAction* newAction = new QAction(name, this);
if(actions.size() > 0) {
// Sort lexically and add to vector
for(std::vector<QAction*>::iterator it = actions.begin(); it != actions.end(); ++it) {
if(name < (*it)->text()) {
actions.insert(it, newAction);
break;
} else {
if(it == actions.end()) {
if(it == actions.begin()) {
actions.push_back(newAction);
break;
} else {
actions.insert(it, newAction);
break;
}
}
}
}
} else {
actions.push_back(newAction);
}
menu->addAction(newAction); // NOT WORKING
}
//menu->addAction(newAction); // IS WORKING
Bedanke mich für sinnvolle Hilfe schon mal im Voraus.