Можно ли заставить Qt вызывать paintEvent после рисования других компонентов Qt?

У меня есть класс, расширяющий QWidget и содержащий QLabel (lblBackground). Я также переопределил функцию paintEvent.

Я хочу нарисовать что-то поверх lblBackground, однако метод paintEvent вызывается до того, как будет нарисован QLabel. Таким образом, мои пользовательские рисунки перезаписываются.

Есть ли способ изменить порядок рисования?


person vahapt    schedule 18.04.2011    source источник


Ответы (2)


Рисовать детей поверх родителей — обычное дело. При этом вы можете попробовать один из следующих вариантов:

  1. расширить сам QLabel, чтобы рисовать все, что вы хотите
  2. попробуйте установить флаг Qt::WA_TranslucentBackground на QLabel и наличие альфа-канала, чтобы базовый родитель (QWidget) просвечивал
  3. если вы используете QLabel только для рисования фона, возможно, вы можете избавиться от него и сначала нарисовать желаемый фон в paintEvent() QWidget?
person Steffen    schedule 18.04.2011

Если вы хотите использовать ярлык в качестве фона, просто создайте свой собственный виджет как дочерний элемент вашего ярлыка. Могут быть разделены некоторые задачи, связанные с оконной рамой, если таковые имеются (будут реализованы как родитель метки) и рисование/элементы управления/и т. д. (будут дочерними по отношению к метке).

person Serge Dundich    schedule 18.04.2011