我有一个带有
windowsflag
Qt::Popup
设置的小部件,我正在尝试创建平滑的圆角。
我尝试使用样式表,但角的透明部分变成黑色。如果我覆盖小部件的绘制事件并在小部件中绘制带有圆角的矩形,也会发生同样的情况。
我也尝试过设置蒙版,但结果变得非常像素化。
经过一番阅读,我发现出现黑角是因为该小部件是顶级小部件。但我认为这仍然是可能的?
如何去除黑角或平滑面膜?
涂装活动:
void PopUp::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
QColor greyColor(0xFFC5C6C6);
QRect rect(0, 0, width(), height());
painter.setRenderHint(QPainter::Antialiasing);
painter.setBrush(QBrush(greyColor));
painter.setPen(QPen(greyColor));
painter.drawRoundedRect(rect, 10, 10);
}
设置遮罩的功能:
void PopUp::setRoundedCorners(int radius)
{
QRegion verticalRegion(0, radius, width(), height() - 2 * radius);
QRegion horizontalRegion(radius, 0, width() - 2 * radius, height());
QRegion circle(0, 0, 2 * radius, 2 * radius, QRegion::Ellipse);
QRegion region = verticalRegion.united(horizontalRegion);
region = region.united(circle);
region = region.united(circle.translated(width() - 2 * radius, 0));
region = region.united(circle.translated(width() - 2 * radius, height() - 2 * radius));
region = region.united(circle.translated(0, height() - 2 * radius));
setMask(region);
}
1. 创建一个小部件并将其 windowFlags 设置为
Qt::Window | Qt::FramelessWindowHint
,并将其 attribute 设置为 Qt::WA_TranslucentBackground
。
2. 在小部件内创建一个
QFrame
。
3. 将样式表设置为
QFrame
,例如:
border: 1px solid red;
border-radius: 20px;
background-color: black;