Exasperation hat geschrieben:Indem ich feststelle, dass wir nicht wussten wie menu() funktioniert
Habs bei mir getestet und hatte den selben Fehler. Hab dann n Zeigerproblem vermutet, aber das wars nicht... Hat alles gestimmt und trotzdem hat mir menu() immer 0 zurückgeliefert...
Und zwar weil eine QAction nicht durch das Hinzufügen zu einem Menu weiß dass das dann sein Menu ist, sondern weil man es (anscheinend) mit QAction::setMenu( QMenu* ) erst setzen muss...
Wusste nicht, dass das so funktioniert... Wenn jemand meint dass es an was anderem lag kann er gern Bescheid sagen, mich wundert das nämlich grade ziemlich, weil auch in der Doku nichts davon steht, dass man das Menu manuell noch zusätzlich mit setMenu setzen muss.
Setz mal diese Zeile dorthin, wo du auch deine Action zu dem Menu hinzufügst.
QMenu *menu;
action->setMenu(menu);
menu = action->menu();
QString test = menu->title();
jetzt stürzt das programm nicht ab, aber ich bekomme lediglich die ausgewählte action zurück, und nicht das menü in dem die action sitzt...
oder hab ich das falsch verstanden?
action->setMenu( my_last_opened_menu ); //hier eben das menu einfügen in welchem sich die action befindet
Du sollst an der Stelle an der du deine action anlegst action->setMenu() aufrufen, also nicht erst in der Funktion in der du den String holst. Sondern dort wo eben deine action entsteht und in ein Menü eingehängt wird.
So.
Und an der Stelle rufst du auch noch action->setMenu auf und übergibst dort auch diese Menü in das du deine Action einfügst...
Du wirst ja bestimmt irgendwo ein mein_tolles_menu->addAction( action ) haben oder? Und dort musst du auch setMenu machen...
Bin mir da allerdings nicht mehr so sicher, aber versuchs mal
und jetzt habe ich das Problem, das meine QAction keine action mehr ist, sondern ein Menü...
also mit einem Pfeil auf der rechten seite...
das problem is natürlich jetzt, das es ein menu is und keine action mehr, daher komme ich natürlich auch nicht mehr in meine Funktion hinein.
Also das heißt. Was macht setMenu? Es weißt einer Action ein Menü als Untermenü zu. Also wenn du zB ne Action hast die "last_opened_files_action" heißt, dann kannst du ihr das zuvor erstellte Menü "last_opened_files_menu" zuweisen und hast eben dieses untermenü... Das bringt uns aber jetzt wenig... Aber wir wissen jetzt dass man mit menu() nicht an das ÜBER-Menü kommt, sondern FALLS eine Action ein weiteres Menü öffnet, dann kommt man eben an dieses Menü....
Das heißt mit menu() kommst du da an den Namen des Menüs in dem sich die Action befindet nicht ran...
Ich (bzw du auch) überleg mir was dann meld ich mich wieder.
m_about_action = new QAction( "About", m_help_menu );
m_help_menu->addAction( m_about_action );
So.. ich hab also dem Action als sein parent das menu zugewiesen in dem sie sich befindet...
jetzt kann ich mit QAction::parentWidget() auf das parent der action zugreifen, caste das dann noch runter weil ich ein QWidget* bekomme aber ein QMenu* bekomme, hol mir von dem den title() und voilà hab ich in meinem String den Namen des Menus.
m_about_action = new QAction( "About", m_help_menu );
m_help_menu->addAction( m_about_action );
So.. ich hab also dem Action als sein parent das menu zugewiesen in dem sie sich befindet...
jetzt kann ich mit QAction::parentWidget() auf das parent der action zugreifen, caste das dann noch runter weil ich ein QWidget* bekomme aber ein QMenu* bekomme, hol mir von dem den title() und voilà hab ich in meinem String den Namen des Menus.