2011-01-22 82 views
2

我用QWebView.load(QUrl(myurl))打開網頁,網頁獲取一些輸入並返回一個新的php生成的頁面。QWebView自動標籤

如果在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

感謝您的任何想法。

回答

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() 

希望這會有所幫助,至於

+0

謝謝!這是解決這個問題的開始。 – Coldmera 2011-01-24 12:57:58