0

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.

Igor Mironchik
  • 582
  • 4
  • 17

0 Answers0