PyQt / Qt:我如何暂时覆盖QTextEdit的paintEvent()方法? (我究竟做错了什么??)

时间:2011-12-15 11:27:25

标签: qt pyqt

我正在尝试在QTextEdit的视口中临时显示QWebPage。以下是我的程序中的相关代码:

class Editor(QTextEdit):
    def __init__(self):
        super(Editor, self).__init__()
        self.webpage = QWebPage(self)
        self.paintwebpage = False

    def showWebPage(self, html):
        self.webpage.mainFrame().setHtml(html)
        self.paintwebpage = True
        self.update()

    def hideWebPage(self):
        self.paintwebpage = False
        self.update()

    def paintEvent(self, event):
        if self.paintwebpage:
            self.webpage.setViewportSize(self.viewport().size())
            painter = QPainter(self.viewport())
            self.webpage.mainFrame().render(painter)
            painter.end()
        else:
            super(Editor, self).paintEvent(event)

它永远不会奏效。我已经尝试了很多变化,包括准确地告诉它要绘制的矩形,或者首先绘制到图像然后绘制图像等。它总是在视口中的奇怪位置显示一行或两行网页。为什么我不能让它从0,0覆盖整个视口?我哪里错了?

[我想从编辑器中显示html代码的预览,而不需要多个空间来获取小部件;例如,当用户按住某个按钮时,视图将暂时翻转到光标附近的html预览。]

1 个答案:

答案 0 :(得分:3)

您可以使用QStackedWidget而不是重载paintEvent而只是交换小部件。 这可能是一个更简单的问题解决方案,因为它只需要调用setCurrentIndex来交换可见的小部件。