Можно наследовать виджет и переопределить виртуальную функцию
Можно подобно, через QAction
Можно прицепить меню, к уже существующему виджету, не наследуя его
Есть еще вариант того же, но с обработчиком контекстного меню, через сигнал
В приведенном ниже примере, в классе TabWidget (наследнике от QTabWidget) устанавливается контекстное меню на ярлыки вкладок (на элемент QTabBar)
Можно подобно, через QAction
Можно прицепить меню, к уже существующему виджету, не наследуя его
Есть еще вариант того же, но с обработчиком контекстного меню, через сигнал
В приведенном ниже примере, в классе TabWidget (наследнике от QTabWidget) устанавливается контекстное меню на ярлыки вкладок (на элемент QTabBar)
Этот комментарий был удален автором.
ОтветитьУдалитьНа эту тему: Как в QTextEdit добавить элемент в контекстное меню?
ОтветитьУдалить1) Наследуя
void MyTextEdit::contextMenuEvent(QContextMenuEvent *event)
{
QMenu *menu = createStandardContextMenu();
menu->addAction(tr("My Menu Item"));
//...
menu->exec(event->globalPos());
delete menu;
}
2) С обработчиком через сигнал
В конструкторе:
/-------------------------------------------------------------------
ui.textEdit_Data->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui.textEdit_Data,SIGNAL(customContextMenuRequested(const QPoint &)),this,SLOT(slotShowContextMenu_textEdit_Data(const QPoint &)));
void MainWindow::slotShowContextMenu_textEdit_Data(const QPoint &p)
{
QMenu * menu = ui.textEdit_Data->createStandardContextMenu();
menu->addSeparator();
menu->addAction(tr("Загрузить"));
menu->addAction(tr("Сохранить"));
menu->exec(ui.textEdit_Data->mapToGlobal(p));
delete menu;
}