Рисунок Qt скрыт другим, но все еще вызывает обновление краски

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

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

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам