2016-08-15 1 views
1

Я использую Qt5.6, у меня есть QWidget графических объектов, и когда другая графика отображается перед другими, это, похоже, вызывает обновление графики под графикой в фронт.Qt-графика, скрытая другим, но все еще вызывает обновление краски

Это создает накладные расходы, я хотел бы определить, полностью ли закрыта графическая оболочка графикой спереди, и если да, то она должна прервать событие рисования.

Я думал, что это будет автоматически и сделано как часть внутренних элементов Qt, но, похоже, это не так.

+0

Только объекты, созданные QWidget. – SPlatten

+0

1) Почему вы попали в ситуацию одного виджета полностью поверх другого? 2) Вы уверены, что в своем аргументе QPaintEvent вы получаете незанятую область? – peppe

+0

Мое приложение отображает содержимое из XML-файла. Некоторые виджеты имеют дочерние виджеты, которые появляются над родителями. – SPlatten

ответ

1

Каждое событие рисования виджета происходит от компоновщика виджета, как только композитор определяет, что виджет должен быть перекрашен. Невозможно прервать его: если событие прибывает, это означает, что виджет должен краской, иначе вы получите визуально неопределенные результаты.

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

Любой виджет, который не прозрачен, должен иметь набор атрибутов Qt::WA_OpaquePaintEvent. Это сообщит компоновщику виджета, что все виджеты, полностью скрытые за виджетами, не должны быть расписаны. Убедитесь, что вы рисуете каждый пиксель вашего виджета!

+0

Спасибо, я попробую это завтра – SPlatten

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