Sto lavorando in un progetto in cui ho bisogno di aprire (mostrare o popup) automaticamente gli elementi in QMenuBar.Come ripetere le azioni di un menu in Qt?
Diciamo che ho la prossima barra dei menu:
File Edit Help
-op1 -op1 -op1
-op2 -op2 -op2
Per impostare un'azione (visualizza il menù asociated con quell'azione) Io uso:
menuBar->setActiveAction(mymenuactionpointer);
Per quanto ne so, posso usare uno dei seguenti per ottenere una lista di puntatori agli elementi di QMenuBar:
QMenuBar::actions();
o
QList<Object*> lst1 = QMenuBar::findChildren<QObject*>();
QList<Object*> lst2 = QMenuBar::findChildren<QAction*>();
Quando uso QMenuBar::findChildren<QAction*>()
o MenuBar::actions()
ho ottenuto un elenco dei menu a barra dei menu, voglio dire, ho ottenuto dalla mia "File, Edit, Help"
QMenuBar, la dimensione del QList in questo caso è 3.
Quando ho utilizzare QMenuBar::findChildren<QObject*>()
Ho ottenuto un elenco di QObject di dimensione 6, che è il numero corretto di elementi nella barra dei menu. Tuttavia, ho tryied gettato a QAction *
QAction *a = (QAction *)lst1.at(0);
QAction *a = qobject_cast<QAction*>(lst1.at(0));
QAction *a = dynamic_cast<QAction*>(lst1.at(0));
In tutti questi casi a
non è nullo, ma quando cerco di ottenere il nome dell'azione QAction::title()
che provoca sempre mi Segmentation Fault.
ho cercato e ho trovato here che dopo aver ottenuto la lista di azioni barra dei menu, si può chiedere a QAction::menu()
(che restituisce un puntatore QMenu valida se l'articolo è un menu) per sapere se l'articolo è un QMenu, se sì, , si può ripetere ottenendo l'elenco delle azioni di quel menu e continuare a ripetere. Ma questo non funziona per me, mi aspettavo che per
QList<Object*> lst2 = QMenuBar::findChildren<QAction*>();
ogni elemento "File, Modifica Help" QAction::menu()
restituisce un puntatore menù valida, così ho potuto ottenere l'elenco delle azioni di ciascun menu, ma questo fa non funziona affatto per me.
Apprezzo molto il tuo tempo e il tuo aiuto, spero che questa domanda aiuti più persone. Sto davvero avendo un momento difficile con questo.
Grazie in anticipo.
io non sono sicuro circa la parte finale della tua domanda. 'QList list = menuBar() -> findChildren ();' restituisce una lista valida di 'QMenu *' s che puoi ripetere usando una funzione ricorsiva, e puoi ottenere '-> actions()'. Cosa non funziona per te? –
Hossein