gpt4 book ai didi

c++ - QScintilla:如何将用户上下文菜单添加到 textEdit? (C++)

转载 作者:行者123 更新时间:2023-11-30 04:53:29 24 4
gpt4 key购买 nike

我正在努力告诉 QScitilla textEdit(我的 MainWindow 应用程序的主要小部件)接受在右键单击鼠标时显示个性化上下文菜单。

如果与 QScintilla 替代品一起使用,如果我使用标准的 Qt5 textEdit 会失败,那么工作正常。我尝试通过一些操作定义用户菜单:

void MainWindow::contextMenuEvent(QContextMenuEvent *event)
{
QMenu menu(this);
menu.addAction(cutAct);
menu.addAction(copyAct);
menu.addAction(pasteAct);
menu.exec(event->globalPos());
}
#endif // QT_NO_CONTEXTMENU

对 QContextMenuEvent 使用react,但只有当我右键单击 MainWindow 的元素而不是 QScintilla textEdit 时,菜单才会显示。当我在 textEdit 中进行操作时,仅显示标准的剪切/复制/粘贴菜单。

如何为 QScintilla textEdit 实现它?

最佳答案

有两种方法:

方法一:为QScintilla文本编辑的上下文菜单策略设置Qt::CustomContextMenu:

    textEdit->setContextMenuPolicy( Qt::CustomContextMenu );
connect(textEdit, SIGNAL(customContextMenuRequested(const QPoint &)),
this, SLOT(ShowContextMenu(const QPoint &)));

}

void MainWindow::ShowContextMenu(const QPoint &pos)
{
QMenu contextMenu(tr("Context menu"), this);

QAction action1("Action 1", this);
connect(&action1, &QAction::triggered, this, []{
qDebug() << "On action 1 click !!!";
});

contextMenu.addAction(&action1);
contextMenu.exec(mapToGlobal(pos));
}

方法二:定义一个QScintilla的子类,然后重新定义覆盖函数contextMenuEvent:

class MyQsciScintilla : public QsciScintilla
{
Q_OBJECT
public:
explicit MyQsciScintilla(QWidget *parent = nullptr);
void contextMenuEvent(QContextMenuEvent *event);
//....
};

void MyQsciScintilla::contextMenuEvent(QContextMenuEvent *event)
{
QMenu *menu = createStandardContextMenu();

menu->addAction(tr("My Menu Item"));
//...
menu->exec(event->globalPos());
delete menu;
}

关于c++ - QScintilla:如何将用户上下文菜单添加到 textEdit? (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53905083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com