Я искал способы реализовать меню «Правка» приложения Qt.Меню «Редактировать» содержит такие элементы, как «Копировать», «Вырезать», «Вставить» и т. Д., Которые необходимо переслать в текущий активный виджет.
Не получается найти стандарт илиэлегантный способ сделать это.По этому вопросу это невозможно:
Как реализовать меню «Правка» с помощью «Отменить», «Вырезать», «Вставить» и «Копировать»?
У меня недавно была идея вызвать событие контекстного меню на текущем активном виджете, когда отображается меню «Редактировать», с помощью:
// create menus in MainWindow constructor
...
edit_menu = menuBar()->addMenu(tr("&Edit"));
connect(edit_menu, SIGNAL(aboutToShow()), this, SLOT(showEditMenu()));
...
// custom slot to handle the edit menu
void MainWindow::showEditMenu()
{
QWidget* w = QApplication::focusWidget();
// show the context menu of current focus widget in the menubar spot
QPoint global_pos = edit_menu->mapToGlobal(edit_menu->rect().bottomLeft());
QPoint pos = w->mapFromGlobal(global_pos);
QApplication::sendEvent(w, new QContextMenuEvent(QContextMenuEvent::Keyboard, pos, global_pos));
}
Это показывает, что контекстное меню для текущего виджета отлично,но есть некоторые проблемы.Например, он отвлекает внимание от строки меню, или если вы сначала щелкнете по другому элементу меню, у панели меню будет фокус и т. Д.
Одним из частичных решений будет получение контекстного меню из виджета.и копировать его элементы в меню редактирования динамически.Есть ли способ сделать это?
Есть ли лучший способ создать меню редактирования в Qt?
Спасибо за вашу помощь.