PyQt / Qt: как временно переопределить метод paintEvent () для QTextEdit?(Что я делаю неправильно??) - PullRequest
0 голосов
/ 15 декабря 2011

Я пытаюсь временно отобразить QWebPage в окне просмотра QTextEdit.Вот соответствующий код из моей программы:

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 Ответ

3 голосов
/ 15 декабря 2011

Вместо перегрузки paintEvent вы можете использовать QStackedWidget и просто поменять местами виджеты. Это может быть более простым решением проблемы, поскольку для обмена видимым виджетом достаточно всего одного вызова setCurrentIndex.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...