答案 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。