Как прикрепить виджет к определенной области экрана?

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

Одним из возможных неоптимальных решений является вызов update() всякий раз, когда изменяется положение виджетов, а затем в paintEvent я могу вычислить и установить соответствующее локальное отсечение в QPainter. Однако было бы очень неэффективно перерисовывать все окно только потому, что оно перемещается на экране. По сути, мой вопрос сводится к тому, можно ли установить глобальную область отсечения для виджета?


person pullo_van    schedule 03.12.2015    source источник


Ответы (1)


Я считаю, что глобальное отсечение невозможно. Но если вас беспокоит частая перерисовка, а содержимое вашего виджета не меняется часто или никогда, вы можете рисовать в QPixmap за пределами paintEvent(). А в paintEvent(), после вычисления отсеченной области, вы просто используете 'QPainter::drawPixmap()`, чтобы быстро нарисовать свой контент. Это должно помочь с любыми проблемами производительности.

person Aaron    schedule 03.12.2015