QPainter перерисовывает окно, получая/теряя фокус

Я изучаю Qt и пытаюсь нарисовать простой дисплей для своей программы с помощью QPainter.

Я рисую статические элементы (кадры и т. д.) один раз и только после этого обновляю динамические элементы.

Все работает нормально, за исключением случаев, когда окно теряет фокус. Как только это происходит, вся область очищается (динамические элементы продолжают прокрашиваться, как и раньше).

Можно ли предотвратить такое поведение? Если нет, как определить, что окно потеряло фокус?


person proarunas    schedule 27.07.2011    source источник


Ответы (2)


Когда ваш виджет открыт, будет вызван элемент paintEvent. Переданное событие имеет элемент region(), который сообщает вам, какая часть виджета должна быть перерисована. Вы можете использовать это для перерисовки статических частей, если/когда это необходимо.

person Mat    schedule 27.07.2011
comment
Я использую регионы, поэтому перерисовываются только активные части. Интересно, почему вся область очищается при изменении фокуса, и как вызвать изменение для полной перерисовки, если невозможно предотвратить очистку. - person proarunas; 30.07.2011

Пока не нашел почему экран перерисовывался, фокус можно срабатывать с помощью

eventFilter(QObject *, QEvent *event) {
if (event->type() == QEvent::ActivationChange){}
}

отсюда можно вызвать функцию рисования. Хотя необходимо добавить небольшую задержку, поскольку триггер обычно срабатывает до того, как окно потеряет фокус (следовательно, все еще очищает перерисовку).

person proarunas    schedule 31.07.2011