У меня есть некоторые проблемы. Надеюсь, кто-нибудь может мне помочь. У меня есть Qwidget1 и Qwidget2. В Qwidget1 есть виджет, который продвигает Qwidget2. И Qwidget1, и Qwidget2 имеют paintEvent. Я набрал «qDebug() < <« Обновить »;« в событии рисования Qwidget1. Когда я запускаю проект, я вижу, что слово «Обновление» было напечатано много раз. Итак, почему Qwidget1 много раз выполнял событие рисования. Как я могу это исправить, просто выполните событие paint, когда вы показываете Qwidget1 в первый раз и когда я вызываю обновление.Qt создатель: paintEvent Qwidget
ответ
Ожидаемое поведение. Ваш код работает так, как должен. Из документации Qt:
Событие с краской - это запрос на перекраску всего или части виджета. Это может произойти по одной из следующих причин:
перекрасить() или обновление() вызывались,
виджет был закрыт, и теперь был раскрыт,
или много других причин.
Может быть любое количество ситуаций, когда окно или его часть становятся недействительными и должны быть перекрашены. Такие ситуации включают, но не ограничиваются следующими:
- изменение размера окна (включая минимизацию/максимизацию/восстановление окна);
- указатель мыши, проходящий через виджет - он может или не может вызвать перерисовку;
- другие окна, перемещающиеся за рассматриваемое окно.
Когда это произойдет, Windows отправит сообщение WM_PAINT
в приложение. Вы можете проверить, соответствует ли количество полученных сообщений WM_PAINT
числу звонков paintEvent
, но я сомневаюсь, что Qt добавляет значительные накладные расходы.
без изменения размера окна, без указателя мыши, проходящего через виджет, и никакое другое окно не перемещается по окну. Когда я удаляю событие рисования Qwidget2, я вижу, что событие paint Qwidget1 выполняется только один раз. – LeHuuTien
- 1. QT paintEvent для QWidget
- 2. Qt paintevent() не срабатывает
- 3. Почему QWidget :: paintEvent не вызван?
- 4. QWidget paintEvent stop вызывается без причины
- 5. Стабилизация QWidget :: paintEvent() вызывает частоту
- 6. Ovveride, the paintevent of Qwidget
- 7. paint() vs paintEvent() in Qt
- 8. Qt Overriding QLabel PaintEvent
- 9. Qt paintEvent crashes
- 10. QWidget/QPainter show() + paintEvent() -> показывает прямоугольник в старой позиции
- 11. Невозможно использовать QPainter в paintEvent заказного QWidget (Qt5)
- 12. Когда виджет Qt получает paintEvent?
- 13. Создатель QT и iconv
- 14. Вставить объект QWidget в Qt Quick 2
- 15. Qt создатель против 2013 (c1057 ошибки)
- 16. Qt - установить QWidget с классом QWidget
- 17. Qt: QWidget :: paintEngine: больше не следует называть
- 18. Central QWidget [Qt]
- 19. Qt подклассов от QWidget
- 20. Qt: Обновление области qwidget
- 21. Qt-пространство вокруг QWidget
- 22. Qt QWidget :: minimumSizeHint delay
- 23. qt QWidget нажмите
- 24. Qt QWidget :: setGeomerty
- 25. Qt - изменить макет QWidget
- 26. Qt paintEvent Могу ли я рисовать дочерний виджет?
- 27. QObject factory in Qt Plugin (не создатель)
- 28. Создатель QT - «QGraphicsScene» не называет тип
- 29. CUDA, создатель Qt и Mac
- 30. Создатель QT и ifstream filenam.c_str()
Ничего не сломано здесь. –
Пожалуйста, объясните причину. – LeHuuTien