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?

Foi útil?

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);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top