I did the subject with connecting QPlainTextEdit::cursorPositionChanged()
signal into my main window's slot:
void
MainWindow::onCursorPositionChanged()
{
if( d->standardEditMenu )
{
d->standardEditMenu->deleteLater();
d->standardEditMenu = nullptr;
}
d->standardEditMenu = d->editor->createStandardContextMenu(
d->editor->cursorRect().center() );
d->standardEditMenu->addSeparator();
d->standardEditMenu->addAction( d->toggleFindAction );
d->standardEditMenu->addAction( d->toggleGoToLineAction );
d->editMenuAction->setMenu( d->standardEditMenu );
connect( d->standardEditMenu, &QMenu::triggered,
this, &MainWindow::onEditMenuActionTriggered );
}
Where d->editMenuAction
is:
editMenuAction = q->menuBar()->addAction( MainWindow::tr( "&Edit" ) );
All works, but I reallocate QMenu *
every time cursor changed in QPlainTextEdit
.
I see this as unneeded waste of CPU. So my question - is it possible to allocate standard edit menu of QPlainTextEdit
by demand?
Thanks.
P.S. If you didn't understand - createStandardContextMenu()
invokes with QPoint
of cursor position in the text, i.e. resulting QMenu *
is with different QAction
for different cases in the text.