2010-12-09 48 views
2

J'utilise C++ et QT4 sous Linux. Je souhaite ajouter des éléments à la barre de menus lors de l'exécution. Mon interface graphique principale contenant la barre de menus a été conçue avec QT Designer et installée dans la première ligne de code ci-dessous.Menu dynamique QT4 en C++

Dans mon constructeur de fenêtre principale, j'ai le code de test suivant et il compile bien. Cependant, la nouvelle barre de sous-menu et son élément n'apparaissent pas lorsque le programme est exécuté. Je devine que Qt doit être dit de mettre à jour la barre de menus d'une manière ou d'une autre. Des idées?

 
// Setup the user interface 
m_ui.setupUi(this); 

QMenu * iObjectsMenu = new QMenu(tr("Objects"), m_ui.menubar); //m_ui.menubar.menu_View->addMenu(tr("Objectz")); 
QAction * menu_testAction = new QAction(tr("Test"), m_ui.menubar); 
iObjectsMenu->addAction(menu_testAction); 
+0

Définition QMenuBar en tant que parent ne pas ajouter le menu à elle (bien, pas de la façon dont vous vous attendiez). Il suffit d'ajouter un menu à la hiérarchie, donc quand QMenuBar est supprimé, votre menu aussi. Ajoutez simplement votre nouveau menu à votre barre de menu –

+0

Pourquoi avez-vous écrit //m_ui.menubar.menu_View->addMenu(tr("Objectz ")) ;? – graphite

Répondre

3

La façon dont vous le faites, vous devez mettre le menu quelque part et vous ne l'avez pas fait.

Je le fais un peu différemment. Lorsque vous créez des menus dans le concepteur, ils ont des pointeurs dans le membre de l'interface utilisateur. Vous pouvez ensuite manipuler ce menu assez facilement. Par exemple, j'ai voulu un menu qui contient toutes les barres d'outils et les fenêtres de dock qui peuvent être montrées/cachées. J'ai regardé le code qui fait QMainWindow::createPopup() et fait ma propre fonction externe construct_view_menu(QMainWindow * parent, QMenu * view_menu). Il est appelé pendant l'initialisation de la fenêtre principale avec construct_view_menu(this, ui.menu_View). La fonction ajoute juste plus de menus et d'actions à ce menu. Le menu_View est juste un menu vide que j'ai créé avec le concepteur. J'ai trouvé que c'était le moyen le plus simple d'y parvenir, mais vous pouvez aussi créer de nouveaux menus, puis les ajouter ou les insérer dans la barre de menu; c'est cette dernière étape que vous avez négligée.

0

Je voudrais simplement générer le menu dans votre code d'installation plutôt que l'interface utilisateur, garder une variable membre qui pointe vers le QMenu (attribué à nouveau)