PyQt/Qt:我如何暂时重写QTextEdit的paintEvent()方法? (我在做什么错误??)

问题描述:

我想暂时在QTextEdit的视口中显示QWebPage。下面是我的程序相关代码:PyQt/Qt:我如何暂时重写QTextEdit的paintEvent()方法? (我在做什么错误??)

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预览。]

不是重载paintEvent,您可以使用QStackedWidget并只交换小部件。 这可能是解决此问题的更简单方法,因为只需拨打setCurrentIndex即可交换可见窗口小部件。

+0

它是一个好主意,我不知道这样的小部件。 (尽管我仍然想知道自己做错了什么,所以我可以更好地学习如何使用绘画事件来绘制小部件。) – Jeff 2011-12-15 12:45:26