Используете прозрачную альфа-маску на 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);
Это отлично справится с рисованием вашего виджета. Если вам все еще нужно маскировать события мыши, возможно, вам придется проделать дополнительную работу.