【问题标题】:How to handle actions from context menu of a QLineEdit in Qt?如何处理 Qt 中 QLineEdit 的上下文菜单中的操作?
【发布时间】:2017-08-10 10:29:44
【问题描述】:

我想拦截在任何 QLineEdit 小部件中默认创建的 QLineEdit 上下文菜单的粘贴操作(见下图)

有没有办法通过任何方式重定向上下文菜单的粘贴操作?

【问题讨论】:

  • 重定向是什么意思,粘贴的文字不一样。
  • @eyllansec 我通常想拦截事件并以不同方式处理数据。

标签: qt contextmenu qwidget qlineedit


【解决方案1】:

可以通过重载 QLineEdit 小部件的 contextMenuEvent 来调整上下文菜单中的操作。

编辑

上面链接的代码:

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

以及我实际用于我的目的的代码:

menu = self.createStandardContextMenu()

menu.actions()[5].connect(self.paste) # The hard ref to the 6th item is not ideal but what can you do...

menu.exec_(event.globalPos())

【讨论】:

  • 你也可以使用createStandardContextMenu():void LineEdit::contextMenuEvent(QContextMenuEvent *event) { QMenu *menu = createStandardContextMenu(); QAction *action = menu->exec(event->globalPos()); if(action->text().compare("&Paste\tCtrl+V") == 0){ qDebug()<<"test"; } }
  • @eyllanesc 没错。出于完整性考虑,我编辑了答案以显示完整的代码。
  • 处理连接动作的更好方法是首先创建一个动作,连接它的“触发”插槽,然后将其添加到菜单中。这也允许您将它索引到任何您想要的上下文菜单中。我建议对您的帖子进行编辑:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多