Вопрос

Я хочу добавить подменю в мое контекстное меню, которое создано так:

self.widget_alignment.setContextMenuPolicy(Qt.ActionsContextMenu)

где есть widget_alencement Qtablewidget.

Я создал новый экземпляр Qmenu:

exchange_bases_menu = QMenu(self.widget_alignment)

добавил некоторые действия, и я нашел метод Quction Qmenu.addmenu (Self, меню Qmenu)

Но я не вижу никакой ссылки на контекстное меню по умолчанию для Self.widget_Alignment. Кроме того, этот код:

self.widget_alignment.addMenu(exchange_bases_menu)

Дал мне: QtableWidget Object не имеет атрибутов AddMenu.

Как я могу добавить свой подменю в контекстное меню по умолчанию?

Это было полезно?

Решение

Согласно документации, когда QWidget Настаивает тип контекстного меню действий, виджет будет построить контекстное меню на основе списка действий, установленных для виджета. Чтобы изменить список действий, вы можете позвонить addAction, insertAction, или же removeAction. Анкет Так что я ожидаю, что вы можете сделать что -то подобное (в 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 );

Не попробовав сам, я ожидаю, что это добавит опцию «есть подменю» в нижнюю часть контекстного меню, которое генерируется для виджета, с подменю, которое вы создали как показанный подменю.

Другие советы

Как насчет использования Qmenu's Popup () в Mousereleaseevent?

if (pEvent->button() == Qt::RightButton)
{
    QMenu menu;
    menu.addAction(action1);
    menu.addAction(action2);
    menu.popup(pEvent->globalPos(),action1);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top