顶级窗口的非像素化圆角

Tan*_*gui 5 qt pyqt rounded-corners qdialog pyside

我想在 QDialog 上设置圆角。由于它是顶级窗口,因此 border-radius 不起作用,所以我必须这样做:

QRegion EnterPinDialog::roundedRect(const QRect& rect, int r)
{
    QRegion region;

    // middle and borders
    region += rect.adjusted(r, 0, -r, 0);
    region += rect.adjusted(0, r, 0, -r);

    // top left
    QRect corner(rect.topLeft(), QSize(r*2, r*2));
    region += QRegion(corner, QRegion::Ellipse);

    // top right
    corner.moveTopRight(rect.topRight());
    region += QRegion(corner, QRegion::Ellipse);

    // bottom left
    corner.moveBottomLeft(rect.bottomLeft());
    region += QRegion(corner, QRegion::Ellipse);

    // bottom right
    corner.moveBottomRight(rect.bottomRight());
    region += QRegion(corner, QRegion::Ellipse);

    return region;
}
Run Code Online (Sandbox Code Playgroud)

我这样称呼它:

this->setMask(roundedRect(this->rect(), 8));
Run Code Online (Sandbox Code Playgroud)

它有效,但问题是角落被像素化。

有没有办法在没有这些像素化角的情况下获得它?如果是,怎么办?

Har*_*ich 0

根据您想要的对话框外观,您甚至可以通过 CSS 完全重新设置顶层窗口的样式,它们遵循盒模型,请参阅整个样式表文档。

border: 2px; border-radius 2px;
Run Code Online (Sandbox Code Playgroud)

会给你一个 2px 宽、半径为 2px 的边框。

我一般来说你应该能够通过样式表处理大部分 ui 定制需求