comment ajouter un menu dynamique dans Qt
Je veux ajouter, sous-menu à un élément de menu de façon dynamique. Comment puis-je arriver à cela?
J'ai essayé comme ceci,
J'ai créé une Action et le sous-menu. Puis j'ai ajouté le sous-menu à l'action.
Mais, j'ai branché les “déclenché” le signal de l'action. de se planter si je clique sur l'action..
J'ai également géré la “aboutToShow” signal de menu, de même aussi se bloquer lorsque je clique sur l'action..
Ici est le sampe code.
Submenu = new QMenu(this);
connect(Submenu, SIGNAL( aboutToShow()), this, SLOT(move ()));
QAction *test = new QAction(tr("Selection"), this);
test ->setMenu(Submenu);
menubar()->addAction(test);
Je veux obtenir la notification, avant l'affichage du sous-menu..
informations complémentaires:
moyens essayer ce code, dans votre fenêtre principale de constructeur.
QAction *action = new QAction("Test",this);
QAction *dummyaction = new QAction("Testing",this);
QMenu *menu = new QMenu();
menu->addAction(dummyaction);
bool val= connect(menu, SIGNAL( aboutToShow()), this, SLOT( Move()));
val= connect(menu, SIGNAL( aboutToHide()), this, SLOT(Move()));
action->setMenu(menu);
this->menuBar()->addAction(action);
si je fais comme ça, je suis capable de voir un élément de sous-menu. Mais avant cela, Déplacer la fente devrait appeler, il n'est pas appelé.. et avant même de le cacher aussi le même logement doit appeler.. sa ne vient pas..
J'ai essayé les valeurs de retour de connecter.. c'est vrai que... alors quel est le problème avec mon code.. s'il vous plaît dire..
OriginalL'auteur Naruto | 2010-05-06
Vous devez vous connecter pour publier un commentaire.
Un tel code devrait fonctionner:
Je pense que ajoutermenu puis() addAction() devrait travailler de façon plus fiable. Cette approche fonctionne pour moi.
Donc, vous voulez remplir de nouveau le menu à chaque fois qu'il est ouvert, suis-je bien compris? Êtes-vous à la suppression des actions antérieures de l', dans le menu move() de la fonction?
NON.. je ne veux pas remplir un menu...il suffit d'ajouter le code ajouté sous la rubrique "informations complémentaires" et essayer dans mainwindow constructeur..voir le comportement..ne reçois pas pourquoi "abouttoshow" le signal est émis. pourriez vous s'il vous plaît vérifier une fois.. est-ce un bug? ou je suis absent de pme chose
J'ai juste essayé de créer un nouveau projet. J'ai créé la classe dérivée de QMainWindow ajouté votre code absolument sans changements et créé Déplacer la fente avec le code: qDebug("Déplacé"); Application fonctionne comme prévu. Rien n'est bloque et je vois des "Déplacés" du texte sur la console à chaque fois que le menu est affiché ou caché. Votre problème n'est pas dans le code que vous avez posté.
la plate-forme êtes-vous essayer? Symbian,ou de bureau?
OriginalL'auteur VestniK
Je ne suis pas sûr de comprendre exactement ce que vous êtes prêt à faire dans votre
Move()
logement.Mais ici, c'est votre propre code (j'ai enlevé ce qui me semblait inutile), modifié de sorte qu'il n'est pas de s'écraser sur mon ordinateur :
mainwindow.h
mainwindow.cpp :
Je ne sais pas exactement ce que vous voulez faire dans votre
Move()
logement, mais à titre d'exemple, chaque fois que leMove()
slot est appelé, un nouvel élément de sous-menu est ajouté.Espère que cette aide.
Je pense que vous devez poster un bug de Qt issue tracker bugreports.qt.nokia.com si vous pensez que c'est un bug dans Symbian mise en œuvre de l'intervalle Qt. J'ai déjà eu cette expérience et je peux dire que le soutien de Nokia ingénieurs sont très amicaux.
Merci, ya.. vous avez raison, ils sont.. j'ai posté un bug aussi, je vais vous mettre à jour sur ce une fois que je reçois une mise à jour de leur
J'utilise Qt Creator 1.3.1, basé sur Qt 4.6.1, sur Windows XP.
OriginalL'auteur Jérôme