如何在Qt中的一个popup窗口小部件上创build光滑的圆angular

我一直在寻找几个小时 – 没有太多的运气。

我有一个窗口小部件Qt :: Popup设置,我试图创build光滑的圆angular。

我试过使用样式表,但angular落的透明部分变成黑色。 如果覆盖小部件的绘画事件并在小部件中绘制带圆angular的矩形,则会发生同样的情况。 我也试图设置一个面具,但结果得到非常像素化。

经过一番阅读,我发现黑angular出现是因为这个小部件是一个顶层的小部件。 但是我会认为这仍然有可能吗?

有谁知道我能做些什么来摆脱黑色angular落或平滑面膜? 任何想法表示赞赏!

绘画事件:

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. Qt::Window | Qt::FramelessWindowHint创建一个小部件 Qt::Window | Qt::FramelessWindowHint Qt::WA_TranslucentBackgroundQt::WA_TranslucentBackground标志
  2. 在小部件内部创建一个QFrame
  3. 设置stylesheel为QFrame ,例如:

    边框:1px纯红色;

    border-radius:20px;

    背景色:黑色;