2

QWebView.load(QUrl(myurl))を使用してWebページを開くと、Webページは入力を取得し、新しいphpで生成されたページを返します。

Firefoxで実行された場合、ブラウザは自動的に新しいタブ/ウィンドウを開き、返されたページを表示します。

返されたデータがロードされた状態でQWebviewの新しいインスタンスを開くようにQWebViewに指示するにはどうすればよいですか?

www.riverbankcomputing.co.uk/static/Docs/PyQt4/html/qwebview.htmlでQwebViewのドキュメントを見ていましたが、喜びはありませんでした。

そのようなページの例: http ://www.iqfront.com/index.php?option = com_content&view = article&id = 5&Itemid = 4

アイデアをありがとう。

4

1 に答える 1

6

私の理解では、これはクリックされた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()

これがお役に立てば幸いです

于 2011-01-23T17:27:20.937 に答える