2009-12-08 7 views
0

Je veux ajouter un sous-menu dans mon menu contextuel qui est créé comme ceci:QT: Référence Menu contextuel (QMenu) du QTableWidget

self.widget_alignment.setContextMenuPolicy(Qt.ActionsContextMenu) 

où widget_alignment est QTableWidget.

J'ai créé une nouvelle instance QMenu:

exchange_bases_menu = QMenu(self.widget_alignment) 

ajouté certaines actions, et j'ai trouvé une méthode QAction QMenu.addMenu (self, QMenu menu)

mais je ne vois aucune référence au menu contextuel par défaut pour self.widget_alignment. De plus, ce code:

self.widget_alignment.addMenu(exchange_bases_menu) 

m'a donné: objet QTableWidget n'a pas d'attribut addMenu.

Comment ajouter mon sous-menu au menu contextuel par défaut? Qu'en est-il de l'utilisation de QMenu's popup() dans MouseReleaseEvent?

Répondre

1

Selon la documentation, lorsqu'un QWidget est réglé pour avoir le contexte des actions type de menu, le widget construira un menu contextuel en fonction de la liste des actions définies pour le widget. Pour modifier la liste des actions, vous pouvez appeler addAction, insertAction ou removeAction. Je vous attendre pourriez faire quelque chose comme ça (en C++):

QAction *act_p = new QAction("Has Submenu", widget_alignment); 
QMenu *submenu_p = new QMenu(act_p); 
// Add items to the submenu 
act_p->setMenu(submenu_p); 
widget_alignment->addAction(act_p); 

Sans chercher moi-même, je me attends à cette option pour ajouter une option « A Sous-menu » au bas du menu contextuel qui est généré pour le widget, avec le sous-menu que vous avez créé comme sous-menu affiché.

+0

Merci cjhuitt! C'est ce qui fonctionne pour moi (en Python): act_p = QAction ("A Sous-menu", self.widget_alignment) submenu_p = QMenu (self.widget_alignment) # Ajouter les articles au sous-menu sa = QAction (» Sous-menu action ", sous-menu_p) submenu_p.addAction (sa) act_p.setMenu (sous-menu_p) self.widget_alignment.addAction (act_p) –

0

if (pEvent->button() == Qt::RightButton) 
{ 
    QMenu menu; 
    menu.addAction(action1); 
    menu.addAction(action2); 
    menu.popup(pEvent->globalPos(),action1); 
}