2016-01-14 2 views
0

У меня есть некоторые проблемы. Надеюсь, кто-нибудь может мне помочь. У меня есть Qwidget1 и Qwidget2. В Qwidget1 есть виджет, который продвигает Qwidget2. И Qwidget1, и Qwidget2 имеют paintEvent. Я набрал «qDebug() < <« Обновить »;« в событии рисования Qwidget1. Когда я запускаю проект, я вижу, что слово «Обновление» было напечатано много раз. Итак, почему Qwidget1 много раз выполнял событие рисования. Как я могу это исправить, просто выполните событие paint, когда вы показываете Qwidget1 в первый раз и когда я вызываю обновление.Qt создатель: paintEvent Qwidget

+0

Ничего не сломано здесь. –

+0

Пожалуйста, объясните причину. – LeHuuTien

ответ

0

Ожидаемое поведение. Ваш код работает так, как должен. Из документации Qt:

Событие с краской - это запрос на перекраску всего или части виджета. Это может произойти по одной из следующих причин:

перекрасить() или обновление() вызывались,

виджет был закрыт, и теперь был раскрыт,

или много других причин.

0

Может быть любое количество ситуаций, когда окно или его часть становятся недействительными и должны быть перекрашены. Такие ситуации включают, но не ограничиваются следующими:

  • изменение размера окна (включая минимизацию/максимизацию/восстановление окна);
  • указатель мыши, проходящий через виджет - он может или не может вызвать перерисовку;
  • другие окна, перемещающиеся за рассматриваемое окно.

Когда это произойдет, Windows отправит сообщение WM_PAINT в приложение. Вы можете проверить, соответствует ли количество полученных сообщений WM_PAINT числу звонков paintEvent, но я сомневаюсь, что Qt добавляет значительные накладные расходы.

+0

без изменения размера окна, без указателя мыши, проходящего через виджет, и никакое другое окно не перемещается по окну. Когда я удаляю событие рисования Qwidget2, я вижу, что событие paint Qwidget1 выполняется только один раз. – LeHuuTien

Смежные вопросы