2013-05-01 32 views
1

後,我用QWebView(蟒蛇3.3 + pyside 1.1.2 +的Qt 4.8)作爲FileViewer。圖片,文字,HTML,......都很好,但PDF有顯示問題。我測試了兩種可能的方式。PDF與QWebView:缺少刷新/重繪加載

  1. 內部的PDF閱讀器:使用webview.load(file)它加載,但 後黑屏,加載另一個文件之後,一切工作正常,它 顯示文件
  2. pdf.js:使用setContent()與filebase後,它 負載用白色頁面,加載圈webviewer.html/.js文件。如果我調整窗體或 屏幕只刷新使用滾動條,但 那麼一切都很好

我沒有找到「插件/ JavaScript的裝完」的活動,所以我可以強制重繪或所以。 這裏殼體1的示例代碼:

import sys 
from PySide import QtCore, QtGui, QtWebKit #@UnusedWildImport 

class DialogTest(QtGui.QDialog): 
    def __init__(self, parent = None): 
     super(DialogTest, self).__init__(parent) 
     self.resize(620, 600) 
     self.setAttribute(QtCore.Qt.WA_DeleteOnClose) 

     self.PreviewBox = QtWebKit.QWebView() 
     self.PreviewBox.settings().setAttribute(QtWebKit.QWebSettings.PluginsEnabled, True) 
     self.PreviewBox.settings().setAttribute(QtWebKit.QWebSettings.WebAttribute.DeveloperExtrasEnabled, True) 
     self.PreviewBox.settings().setAttribute(QtWebKit.QWebSettings.PrivateBrowsingEnabled, True) 
     self.PreviewBox.settings().setAttribute(QtWebKit.QWebSettings.LocalContentCanAccessRemoteUrls, True) 
     self.PreviewBox.loadFinished.connect(self._loadfinished) 
     self.button_test1 = QtGui.QPushButton("File 1") 
     self.button_test1.clicked.connect(self._onselect1) 
     self.button_test2 = QtGui.QPushButton("File 2") 
     self.button_test2.clicked.connect(self._onselect2) 
     layout_Buttons = QtGui.QHBoxLayout()   
     layout_Buttons.addWidget(self.button_test1)   
     #layout_Buttons.addStretch() 
     layout_Buttons.addWidget(self.button_test2) 
     layout_Main = QtGui.QVBoxLayout()  
     layout_Main.addLayout(layout_Buttons) 
     layout_Main.addWidget(self.PreviewBox)     
     self.setLayout(layout_Main)  
    def Execute(self): 
     self.show() 
     self.exec_() 
    def _onselect1(self): 
     self.PreviewBox.load(QtCore.QUrl().fromLocalFile("c:\\tmp\\test1.pdf")) 
    def _onselect2(self): 
     self.PreviewBox.load(QtCore.QUrl().fromLocalFile("c:\\tmp\\test2.pdf")) 
    def _loadfinished(self, ok): 
     #self.PreviewBox.repaint() 
     pass 
app = QtGui.QApplication(sys.argv) 
DialogTest().Execute() 

編輯:解決方法 情況1(WebKit的插件)具有otherbug,它把焦點到自身,所以這個解決方案是不能接受的我。我與pdf.js發揮再次發現一個workaroud:

self.PreviewBox.setHtml(content, baseUrl = QtCore.QUrl().fromLocalFile(path)) 
    self.PreviewBox.hide() 
    QtCore.QTimer.singleShot(700, self.PreviewBox.show) 

hide()必須在之後的內容填充和計時器還沒有太低。

//周杰倫

回答

1

我只是解決了類似的問題,每一個PDF加載之前清潔QWebView。 小心的loadFinished()信號。

在您的例子:

self.PreviewBox.load(QUrl('about:blank')) 

,或者在情況下,我們不喜歡在 'about:空白',這可能是一個更便攜的解決方案:

self.PreviewBox.setHtml('<html><head></head><title></title><body></body></html>')