在 QPlainTextEdit 的上下文菜单中添加事件

Art*_*lif 2 c++ qt contextmenu qplaintextedit

context_menu_now

这是我右键单击QPlainTextEdit后的上下文菜单。我想添加功能以从Context Menu 中的文件加载数据。我可以吗?如何?

m79*_*13d 5

方法一: QPlainTextEdit::contextMenuEvent

您应该覆盖QPlainTextEdit::contextMenuEventQt 文档中提到的:

void MyQPlainTextEdit::contextMenuEvent(QContextMenuEvent *event)
{
    QMenu *menu = createStandardContextMenu();
    menu->addAction(tr("My Menu Item"));
    //...
    menu->exec(event->globalPos());
    delete menu;
}
Run Code Online (Sandbox Code Playgroud)

您可以将QAction::triggered信号连接到您的方法(槽)以加载数据,或者您可以使用QMenu::addAction重载之一,这允许您直接指定槽。

如果你不想子类化QPlainTextEdit(覆盖contextMenuEvent),你可以在 Qt 中使用事件过滤

请注意,contextMenuEvent()仅在contextMenuPolicy未设置(或设置为其默认值Qt::DefaultContextMenu)时调用

方法二: QWidget::customContextMenuRequested

作为替代方案,您可以使用 Qt 的信号和槽机制在用户请求时创建上下文菜单。

contextMenuPolicy属性应设置为Qt::CustomContextMenu,在这种情况下,QWidget::customContextMenuRequested只要用户请求上下文菜单,就会调用该信号。这个信号应该连接到你自己的插槽,它应该创建上下文菜单,如上面的代码(方法 1)所示。

使用MyQPlainTextEditQt设计师

MyQPlainTextEdit.ui文件中使用您的文件,您应该将其实现为提升文件QPlainTextEdit并在您的.ui文件中使用它而不是常规的QPlainTextEdit. 有关更多信息,请参阅Qt 文档

为了能够在 Qt 设计器中使用您的类,您不应忘记实现一个接受父类的构造函数如示例中QWidget所做的那样。请注意,实现这样的构造函数总是一个好主意,因为 Qt 通常通过子父关系管理所有权AnalogClock