bonjour,
je recherche une aide pour creer un menu qui apparaitrai sous un bouton lorsque je cliquerai dessus. J'essai de regarder du coté des popup menu, mais j'ai un peu de mal pour trouver.
Quelqu'un pourrait il m'aider un peu.
merci
Version imprimable
bonjour,
je recherche une aide pour creer un menu qui apparaitrai sous un bouton lorsque je cliquerai dessus. J'essai de regarder du coté des popup menu, mais j'ai un peu de mal pour trouver.
Quelqu'un pourrait il m'aider un peu.
merci
Salut,
ça dépend de ton OS / Appliaction GUI ( Qt, MFC ...)
un exemple sous Windows avec l'API Win32
hWnd est le handle de la window parenteCode:
1
2
3
4
5 HMENU hPopupMenu = CreatePopupMenu(); InsertMenu(hPopupMenu, 0, MF_BYPOSITION | MF_STRING, ID_POPUP_MYCOMMAND, "Ma Commande"); SetForegroundWindow(hWnd); TrackPopupMenu(hPopupMenu, TPM_BOTTOMALIGN | TPM_LEFTALIGN, xpos, ypos, 0, hWnd);
xpos et ypos sont les coordonnées à l'écran, que tu peux obtenir avec (par exemple pour la souris) :
donc xpos = p.x et ypos = p.yCode:
1
2
3 POINT p; GetCursorPos(&p);
merci de ta réponse.
Pour donner plus de détail je suis sous windows vista, je travaille sur QT.
Dans ce cas tu trouveras des réponses dans le forum Qt, par exemple:
http://www.developpez.net/forums/d66...pup-miniscule/
merci pour ton aide.
donc voila ce que j'ai fais.
Dans mon .h j'ai mis :
dans mon cpp :Code:
1
2
3
4
5
6 // pour menu popup QMenu *contextMenu; QAction *dvd; QAction *cd; QAction *divx ;
A la compilation tout se passe bien. Mais lorsque je clic sur mon bouton, ca me met que l'application a cesser de fonctionner et ca ferme l'appli.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 void FormPrinc::createMenu() { contextMenu = new QMenu(this); // On cree le menu // Creation des actions (entrées de menu) dvd = new QAction(tr("dvd"), this); dvd->setCheckable(true); cd = new QAction(tr("cd"), this); cd->setCheckable(true); divx = new QAction(tr("divx"), this); divx->setCheckable(true); } void FormPrinc::on_btMultimedia_clicked() { this->addAction(dvd); this->setContextMenuPolicy(Qt::ActionsContextMenu); }
Quelqu'un peut il m'aider ? merci
j'ai fais quelque changement,
mon cpp :
Que dois je mettre dans ma fonction on_btMultimedia_clicked() pour faire apparaitre mon menu ?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 void FormPrinc::createMenu() { contextMenu = new QMenu(this); // On cree le menu // Creation des actions (entrées de menu) dvd = new QAction(tr("dvd"), this); dvd->setCheckable(true); cd = new QAction(tr("cd"), this); cd->setCheckable(true); divx = new QAction(tr("divx"), this); divx->setCheckable(true); this->addAction(dvd); this->setContextMenuPolicy(Qt::ActionsContextMenu); } void FormPrinc::on_btMultimedia_clicked() { }
merci
Bon j'ai essayé autre chose, mais j'en suis au meme point. J'ai oublié des trucs mais je ne sais pas quoi.
Voila mon nouveau code :
dans le .h :
dans le .cpp :Code:
1
2
3
4
5 QMenu *contextMenu; QAction *dvd; QAction *cd; QAction *divx ;
Pas d'erreur a la compilation.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 void FormPrinc::createActionsMultimedia() { private: void createMenuMultiMedia(); void createActionsMultimedia(); dvd = new QAction(tr("&dvd"), this); connect(dvd, SIGNAL(triggered()), this, SLOT(show())); divx = new QAction(tr("&divx"), this); connect(divx, SIGNAL(triggered()), this, SLOT(show())); cd = new QAction(tr("&cd"), this); connect(cd, SIGNAL(triggered()), this, SLOT(show())); } void FormPrinc::createMenuMultiMedia() { contextMenu = new QMenu(this); // On cree le menu contextMenu->addAction(dvd); contextMenu->addAction(cd); contextMenu->addAction(divx); contextMenu->setContextMenuPolicy(Qt::ActionsContextMenu); }
Maintenant comment puis je faire pour lorsque je clic sur un bouton, mon menu apparaisse ?
merci
QMenu est un QWidget, donc y'a une méthode show() et une méthode hide() (ou setVisible(bool) ).
merci !!
pff j'etais fatigué, c'etait si simple !
Ca fonctionne merci