Используете прозрачную альфа-маску на QWidget? - PullRequest
2 голосов
/ 29 сентября 2011

Можно ли назначить альфа-прозрачную маску для QWidget?Я знаю, как установить маску, используя setMask, но кажется, что она поддерживает только черно-белые маски.Можно ли заставить его поддерживать настоящий альфа-канал?

то есть в настоящее время у меня есть PNG, подобный этому:

enter image description here

и виджет, подобный этому:

enter image description here

Если я загружаю свой PNG в QPixmap и устанавливаю его как маску, я получаю это (обратите внимание на края):

enter image description here

Однако я хотел бы получить это (сглаженные края):

enter image description here

Есть идеи, как это сделать?

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

1 Ответ

2 голосов
/ 29 сентября 2011

Я думаю, что ваш лучший маршрут - в режимах композиции QPainter .

Например:

QPixmap PixmapToBeMasked(Size);
PixmapToBeMasked.fill(QColor(255, 255, 255, 120));

QPixmap Mask = DoSomethingToGetAMask();

QPainter Painter(&PixmapToBeMasked);
Painter.setCompositionMode(QPainter::CompositionMode_DestinationIn);
Painter.drawPixmap(0, 0, Mask.width(), Mask.height(), Mask);

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

...