QWebView 自动标签

Posted

技术标签:

【中文标题】QWebView 自动标签【英文标题】:QWebView Auto Tabs 【发布时间】:2011-01-22 04:33:39 【问题描述】:

我用 QWebView.load(QUrl(myurl)) 打开一个网页,网页得到一些输入并返回一个新的 php 生成页面。

如果在 Firefox 中执行,浏览器会自动打开一个新选项卡/窗口以显示返回的页面。

如何告诉 QWebView 打开一个新的 QWebview 实例并加载返回的数据?

我在查看 QwebView 文档 www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qwebview.html ...但没有乐趣。

此类页面的示例: http://www.iqfront.com/index.php?option=com_content&view=article&id=5&Itemid=4

感谢您的任何想法。

【问题讨论】:

【参考方案1】:

据我了解,这是开发人员的工作,即为单击的 url 创建和打开新选项卡。您需要为 QWebView::linkClicked 信号定义一个自定义插槽。每当用户单击链接并且页面的 linkDelegationPolicy 属性设置为委派指定 url 的链接处理时,都会发出此信号。在那里你可以创建一个新的 QWebView 实例,添加一个选项卡并在那里打开新的 url。下面是一个例子:

import sys
from PyQt4 import QtGui, QtCore, QtWebKit 

class MainForm(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MainForm, self).__init__(parent)

        self.tabWidget = QtGui.QTabWidget(self)        
        self.setCentralWidget(self.tabWidget)        
        self.loadUrl(QtCore.QUrl('http://qt.nokia.com/'))

    def loadUrl(self, url):    
        view = QtWebKit.QWebView()  
        view.connect(view, QtCore.SIGNAL('loadFinished(bool)'), self.loadFinished)
        view.connect(view, QtCore.SIGNAL('linkClicked(const QUrl&)'), self.linkClicked)
        view.page().setLinkDelegationPolicy(QtWebKit.QWebPage.DelegateAllLinks)
        self.tabWidget.setCurrentIndex(self.tabWidget.addTab(view, 'loading...'))
        view.load(url)

    def loadFinished(self, ok):
        index = self.tabWidget.indexOf(self.sender())
        self.tabWidget.setTabText(index, self.sender().url().host())

    def linkClicked(self, url):        
        self.loadUrl(url)

def main():
    app = QtGui.QApplication(sys.argv)
    form = MainForm()
    form.show()
    app.exec_()

if __name__ == '__main__':
    main()

希望这会有所帮助,问候

【讨论】:

以上是关于QWebView 自动标签的主要内容,如果未能解决你的问题,请参考以下文章

QT多标签浏览器

如何设置 QWebView 的套接字选项?

替代 QWebView()

QWebView 的内存(缓存)管理

QTextBrowser 还是 QWebView?

如何在 PyQt 中对 qwebview 应用掩码?