Название: QLineEdit и перерисовка всего окна [решено] Отправлено: Igors от Январь 29, 2014, 12:33 Добрый день
Смотрю что-то paint у меня случается гораздо чаще чем я рассчитывал. Выясняется что его вызывает активный QLineEdit при каждом блинке курсора. Ну если QLineEdit сам хочет перерисоваться - на здоровье, это его личное дело, но зачем окно-то трогать? Как от этого избавиться? Тестовый пример прилагаю. Спасибо Название: Re: QLineEdit и перерисовка всего окна Отправлено: Bepec от Январь 29, 2014, 12:49 В QPaintEvent передаются границы области, которую надо перерисовывать. Избавиться от перерисовки вы не сможете - это механизм Qt.
Перерисовка ребенка вызывает перерисовку родителя и родителя родителя. Пара вариантов что можно сделать, на мой взгляд - 1) либо блокировать сообщения с координатами вашего lineEdit, но тогда будет множество других проблем, да и блинк рисоваться не будет, да и lineEdit умрёт как интерактивный виджет. 2) либо разбить отрисовку на "области" и в каждом paintEvent'e отрисовывать только передаваемую часть. 3) убрать ресурсоёмкие операции из paintEvent. Потому что я не вижу проблем в отрисовке всего виджета. 4) есть конечно и бредовый вариант накладывать нужные вам виджеты на ваш виджет без размещения на нём. Название: Re: QLineEdit и перерисовка всего окна Отправлено: Old от Январь 29, 2014, 12:57 Как от этого избавиться? Установите QLineEdit атрибут Qt::WA_OpaquePaintEvent, но могут полезть артефакты. Проверьте.Название: Re: QLineEdit и перерисовка всего окна Отправлено: Igors от Январь 29, 2014, 14:40 Как от этого избавиться? Установите QLineEdit атрибут Qt::WA_OpaquePaintEvent, но могут полезть артефакты. Проверьте.Название: Re: QLineEdit и перерисовка всего окна Отправлено: Old от Январь 29, 2014, 14:46 Детали: ОС генерирует события для нижних виджетов если верхний не "opaque" Ну это просто события EraseBackground, если мы сами полность перерисовываем фон верхнего виджета, то фон затирать не обязательно, а вот если верхний виджет думает что у него чистый фон обеспеченный парентом или он полупрозрачнй, то будут артефакты.Название: Re: QLineEdit и перерисовка всего окна [решено] Отправлено: Igors от Январь 31, 2014, 09:01 Кстати верно и обратное: перерисовка parent'а не вызывает перерисовку child'а с флагом WA_OpaquePaintEvent
|