Qt: menu de contexto (qmenu) referência do qtablewidget
Pergunta
Quero adicionar um submenu no meu menu de contexto que é criado assim:
self.widget_alignment.setContextMenuPolicy(Qt.ActionsContextMenu)
onde está widget_alignment QTableWidget.
Eu criei uma nova instância Qmenu:
exchange_bases_menu = QMenu(self.widget_alignment)
Adicionei algumas ações, e eu encontrei um método Qaction qmenu.addmenu (menu qmenu)
Mas não vejo nenhuma referência ao menu de contexto padrão para self.widget_alignment. Além disso, este código:
self.widget_alignment.addMenu(exchange_bases_menu)
me deu: o objeto QtableWidget não tem atributo addmenu.
Como posso adicionar meu submenu ao menu de contexto padrão?
Solução
De acordo com a documentação, quando um QWidget
está configurado para ter o tipo de menu de contexto de ações, o widget construirá um menu de contexto com base na lista de ações definidas para o widget. Para modificar a lista de ações, você pode ligar addAction
, insertAction
, ou removeAction
. Então, eu esperaria que você pudesse fazer algo assim (em 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 );
Sem experimentar, eu esperaria que isso adicionasse uma opção "tem submenu" à parte inferior do menu de contexto que é gerado para o widget, com o submenu que você criou como o submenu mostrado.
Outras dicas
Que tal usar o PopUp () de Qmenu no MousereleaseEvent?
if (pEvent->button() == Qt::RightButton)
{
QMenu menu;
menu.addAction(action1);
menu.addAction(action2);
menu.popup(pEvent->globalPos(),action1);
}