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

时间:2017-05-06 11:56:18

标签: c++ qt contextmenu qplaintextedit

context_menu_now

右键单击 QPlainTextEdit 后,这是我的上下文菜单。我想在上下文菜单中添加从文件加载数据的功能。我可以吗?怎么样?

1 个答案:

答案 0 :(得分:2)

方法1:QPlainTextEdit::contextMenuEvent

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

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

您可以将QAction::triggered信号连接到方法(插槽)以加载数据,也可以使用QMenu::addAction重载之一,这样就可以直接指定插槽。

如果您不想继承QPlainTextEdit(覆盖contextMenuEvent),可以在Qt中使用event filtering

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

方法2:QWidget::customContextMenuRequested

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

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

在Qt Designer中使用MyQPlainTextEdit

要在MyQPlainTextEdit文件中使用.ui,您应该将其作为提升的QPlainTextEdit实施,并在.ui文件中使用,而不是常规{{1} }}。有关详细信息,请参阅Qt documentation

为了能够在Qt Designer中使用您的类,您不应该忘记实现接受父QPlainTextEdit的构造函数,就像the AnalogClock example中所做的那样。请注意,实现这样的构造函数总是一个好主意,因为Qt通常是manages ownership through a child-parent relationship