Qt Designer 中的 QPushButton 没有显示圆角

Rounded corners not shown for QPushButton in Qt Designer

我想在 Qt 设计器中为 QPushButton 设置圆角和悬停。更改样式 sheet 无效。哪里做错了?

    QPushButton#pushButton_3{
        background: rgb(170, 170, 255);
        border: 2px  solid  rgb(0, 170, 255);
        border-style: outset;
        border-width: 2px;
        border-radius: 20px;
        color: white;   
    }
    
    QPushButton:hover#pushButton_3{
        background-color:  rgb(0, 255, 255);
        border: 2px  solid  (0, 255, 255);
    }

这是设置上述样式 sheet 后得到的结果:

TL;DR

border-radius 使用较小的值,通常是标准字体大小的一半(2 <= 半径 <= 10)。

进一步说明

QSS 边界半径必须有一个合理的值。

私有 QStyleSheetStyle 标准化 边界半径(或者,更好的是,所有四个边界半径)基于小部件的边界矩形,其中包括边界大小。

每当 任何 边界半径超过与其角相关的尺寸时,所有半径都将被忽略。

例如,如果小部件的矩形的高度为 10,则其 top-leftbottom-left 半径的 sum 必须等于或小于10,否则左角会变成正方形。

请注意,小部件通常只考虑其尺寸提示的边框,而不是它们的最小尺寸提示,并且该行为也会根据当前样式而改变。

通常使用当前样式的 pixelMetric() and fontMetrics() 创建按钮,并且由于按钮的标准高度约为 30 像素,考虑到上述情况,指定的 border-radius 过大:总和任何角组件的高度始终大于小部件高度,因此半径将被忽略,边框将是方形的。

那么,如何设置合适的边框半径呢?

简单的答案是:使用“小”值,通常不超过边框宽度的两倍或四倍。

实际答案更复杂,因为我们需要考虑到小部件通常有一些显示文本,任何现代OS都支持字体缩放高DPI屏幕。

QSS 支持除标准 px 之外的各种类型 lengths:

  • px:像素(通常是物理像素,AFAIK,实际值取决于 OS 及其实现的高 DPI);
  • pt:一个点的大小(基于屏幕 DPI,AFAIK,仅用于文本属性,忽略 widget/border 大小);
  • em:字体的em宽度(以显示的字体为准);
  • ex:字体的x-height(同上);

如果您想正确支持任何现代 OS,您可能需要使用最后两个值中的任何一个,这是为 sheet 设置全局样式的另一个重要原因应用程序:只要创建应用程序,就可以知道默认(或导入)的字体,并最终根据当前设备像素比率和字体指标设置具有格式化宽度或大小的主要样式sheet。