HLine
而且VLine
风格很棘手。值得看一下文档的“详细说明”部分。为了快速修复,我发现这组规则允许通过样式表以可靠且相对干净的方式自定义此类行的外观:
QFrame[frameShape="4"],
QFrame[frameShape="5"]
{
border: none;
background: red;
}
这与frameShadow
属性无关,否则会影响它们的外观和样式规则的效果。请记住,默认情况下线条的宽度不是1px —— 这可以使用 、 或 属性进行更改min-width
,视情况而定max-width
。min-height
max-height
有关我的发现的更详细概述,请继续阅读。
大多数QFrame
s 默认具有QFrame::Plain frameShape,但HLine
andVLine
的默认 frameShape 是QFrame::Sunken
. 这意味着它们不是真正的线条,而是包含用于提供 3D 效果的中线的细框。从文档中:
中线宽度指定帧中间多出一条线的宽度,它使用第三种颜色来获得特殊的 3D 效果。请注意,仅针对凸起或凹陷的 Box、HLine 和 VLine 框架绘制中线。
如果将 frameShape 设置为 Plain,此中线仍然可见,并且可以使用该color
属性设置样式(注意:这不是abackground-color
或border-color
!)
但这不适用于保留默认 Sunken 外观的 HLine/VLine。解决此问题的一种方法是使用属性选择器和属性枚举的十进制值(在 hehadecimal 文档中描述)为普通和沉没 QFrames 设置单独的样式,如下所示:
/* Reference (from doc.qt.io/qt-5/qframe.html#types):
* - frameShape[4] --> QFrame::HLine = 0x0004
* - frameShape[5] --> QFrame::VLine = 0x0005
* - frameShadow[16] --> QFrame::Plain = 0x0010 (default for most widgets)
* - frameShadow[48] --> QFrame::Sunken = 0x0030 (default for HLine/VLine)
*/
QFrame[frameShape="4"][frameShadow="16"],
QFrame[frameShape="5"][frameShadow="16"]
{
...
}
QFrame[frameShape="4"][frameShadow="48"],
QFrame[frameShape="5"][frameShadow="48"]
{
...
}
但由于使用 QFrame::Sunken 的 HLine/VLine 的样式也适用于带有 的样式,QFrame::Plain
因此这样做通常是一种浪费。我在上面向他们展示了关于如何使用属性选择器的教育价值。
最好的方法是把 QFrame 当作盒子来对待,并且(1)设置border-top
或border-right
与一个max-height: 0px
(或max-width
对于一个 VLine)耦合,以确保盒子的内部不会占用布局中的空间;或者 (2) 使用背景颜色加上border: none
(在这种情况下,max-height/width 应该是 1 或更大,否则 QFrame 是不可见的)。后者是我推荐的解决方案,如上面的第一个代码块所示。
希望这可以帮助!