Pyqt5右键单击并在新选项卡中打开

Posted

技术标签:

【中文标题】Pyqt5右键单击并在新选项卡中打开【英文标题】:Pyqt5 Right click and open in new tab 【发布时间】:2018-01-06 09:59:29 【问题描述】:

我有 qwebengine,我已经用自定义弹出菜单覆盖了它的上下文菜单,我需要添加菜单项,当我右键单击一个 url 时,它会给我在新选项卡中打开的选项,我如何实现这一点?我不知道该怎么做,所以我没有要显示的代码,也没有足够的主题,但是在 qt simple broswer 中,他们有以下代码,但我不理解,因为我从未使用过 qt 这里是示例:

void WebView::contextMenuEvent(QContextMenuEvent *event)

    QMenu *menu = page()->createStandardContextMenu();
    const QList<QAction*> actions = menu->actions();
    auto it = std::find(actions.cbegin(), actions.cend(), page()->action(QWebEnginePage::OpenLinkInThisWindow));
    if (it != actions.cend()) 
        (*it)->setText(tr("Open Link in This Tab"));
        ++it;
        QAction *before(it == actions.cend() ? nullptr : *it);
        menu->insertAction(before, page()->action(QWebEnginePage::OpenLinkInNewWindow));
        menu->insertAction(before, page()->action(QWebEnginePage::OpenLinkInNewTab));
    
    menu->popup(event->globalPos());
 

如果有人可以解释上面的代码并提供简单的sn-p我如何在pyqt中实现它,我将非常感激。

【问题讨论】:

【参考方案1】:
self.yourWidget_qwebengine.contextMenuEvent=self.mycontextMenuEvent

def mycontextMenuEvent(self, event):
        menu = QtWidgets.QMenu(self)
        oneAction = menu.addAction("&Open New Tab")
        twoAction = menu.addAction("O&pen in New Window")
        menu.exec_(event.globalPos())

如果您覆盖了上下文菜单事件,添加这个简单的代码可能会有所帮助

【讨论】:

我已经按照您之前的建议进行了操作,但是我如何才能获得被右键单击的链接?有没有办法做到这一点?【参考方案2】:

如果链接被右键点击,使用下面的sn-p获取地址:

self.page().contextMenuData().linkUrl()

其中 self 是 QWebEngineView。你可以在url上调用isEmpty()来测试它是否真的是一个被右键点击的链接。

【讨论】:

我尝试了这段代码,但是当我运行它时,它没有打开任何东西,当我评论这个代码部分时,它又运行了

以上是关于Pyqt5右键单击并在新选项卡中打开的主要内容,如果未能解决你的问题,请参考以下文章

jQuery:检测鼠标单击并在新选项卡中打开目标

Ajax 在 div 中加载页面内容,但在右键单击时保持“在新选项卡中打开”

Javascript - 通过单击按钮在新选项卡中打开给定的 URL

Angular 2 - 重定向到外部 URL 并在新选项卡中打开

单击 HTML 按钮时在新浏览器选项卡中打开 URL

是否可以检测用户是否在新选项卡中打开了链接?