QPainter перерисовывает окно, получая / теряя фокус - PullRequest
1 голос
/ 27 июля 2011

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

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

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

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

Ответы [ 2 ]

1 голос
/ 27 июля 2011

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

0 голосов
/ 31 июля 2011

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

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

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

...