Используете прозрачную альфа-маску на QWidget?

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

то есть в настоящее время у меня есть PNG, как это:

и виджет, как это:

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

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

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

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

1 ответ

Решение

Я думаю, что ваш лучший маршрут - в режимах композиции 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);

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

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