Seite 1 von 1

[solved] QMenu::addAction funktioniert in if-clause nicht

Verfasst: 9. April 2013 17:30
von MADsCIENTIST
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:

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

Wie ist das zu lösen?

Bedanke mich für sinnvolle Hilfe schon mal im Voraus.

Re: QMenu::addAction funktioniert in if-clause nicht

Verfasst: 10. April 2013 03:05
von MADsCIENTIST
Hat sich wieder erledigt! - Habe einfach eine extra Funktion geschrieben, welche das Menü von grundauf neu anlegt, wenn ein neues Item hinzugekommen ist.

Code: Alles auswählen

// For setting the popup menu [or] recreating the popup menus content
void setPopupMenu() {
	if(menu != NULL)
		delete menu;

	menu = new QMenu;

	// Add vector items
	for(int i=0; i<actions.size(); i++)
		menu->addAction(actions.at(i));

	connect(menu, SIGNAL(triggered(QAction*)), this, SLOT(popupSelection(QAction*)));
}
Ganz simpel :D