PDF mit QWebView: fehlende Aktualisierung / Neulackierung nach dem Laden

Ich verwende dasQWebView (Python 3.3 + Pyside 1.1.2 + Qt 4.8) als FileViewer. Bild, Text, HTML, ... alles in Ordnung, aber PDF hat ein Anzeigeproblem. Ich habe zwei Möglichkeiten ausprobiert.

Interner PDF-Viewer: Nach Gebrauchwebview.load(file) Es wird geladen, aber der Bildschirm ist leer. Nach dem Laden einer anderen Datei funktioniert alles einwandfrei. Es wird die Datei angezeigtpdf.js: nach gebrauchsetContent() Mit der Dateibasis wird die Datei webviewer.html / .js mit einer weißen Seite und dem Ladekreis geladen. Der Bildschirm wird nur aktualisiert, wenn ich die Größe des Formulars ändere oder die Bildlaufleisten verwende, aber dann ist alles in Ordnung

Ich finde kein Event für "Plugin / Javascript fertig geladen", daher kann ich ein Repaint erzwingen oder so. Hier ein Beispielcode für Fall 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() 

Bearbeiten: Problemumgehung Fall 1 (Webkit-Plugin) hat einen anderen Fehler, der den Fokus auf sich zieht, daher ist diese Lösung für mich nicht akzeptabel. Ich habe wieder mit der pdf.js gespielt und eine Problemumgehung gefunden:

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

Dashide() muss nach dem Befüllen des Inhalts sein und der Timer darf nicht zu niedrig sein.

// Jay

Antworten auf die Frage(1)

Ihre Antwort auf die Frage