用于HLine/VLine颜色的QT样式表

K12*_*120 5 css qt stylesheet

我对这个QT事物很新,它是整个样式表系统.我的HTML/CSS背景有助于理解系统,但很多事情都是在没有明显原因的情况下发生的......或者没有发生

无论如何,HLINE和VLINE的神秘面纱以及如何改变线条颜色对我来说只是一个谜.我从其他问题和各种论坛中了解到它与QFrame元素相关联.如果我只是使用类似的东西,我可以改变线条的颜色

QFrame
{
color: red;
}
Run Code Online (Sandbox Code Playgroud)

但是这个过程改变了使用QFrame的其他东西的颜色.我当然可以进入HLINE元素并输入"color:red;" 在那里,这工作正常,但我的应用程序要求我把所有内容放在一个加载到应用程序的样式表中.因此,不能选择单个元素的样式.

解决方案就像是

QFrame HLine, QFrame VLine
{
color: red;
}
Run Code Online (Sandbox Code Playgroud)

yor*_*eta 12

QFrame[frameShape="4"] /* QFrame::HLine == 0x0004 */
{
    color: red;
}

QFrame[frameShape="5"] /* QFrame::VLine == 0x0005 */
{
    color: green;
}
Run Code Online (Sandbox Code Playgroud)

  • 注意:仅当[frameShadow](http://doc.qt.io/qt-5/qframe.html#Shadow-enum)设置为`Plain`时,`color`才有效-HLine和VLine的默认值为[QFrame :: Sunken](http://doc.qt.io/qt-5/qframe.html#picture)。请参阅我的答案以获取更多详细信息。 (2认同)

wal*_*ous 8

HLine并且VLine是棘手的风格.值得一看文档的" 详细说明 "部分.为了快速解决问题,我发现这套规则允许通过样式表以可靠和相对干净的方式自定义这些行的外观:

QFrame[frameShape="4"],
QFrame[frameShape="5"]
{
    border: none;
    background: red;
}
Run Code Online (Sandbox Code Playgroud)

无论frameShadow属性如何,这都会起作用,否则会影响它们的外观和样式规则的效果.请注意,所述线的宽度是默认1像素-这可以使用被改变min-width,max-width,min-heightmax-height特性,根据.

有关我的发现的更详细的概述,请继续阅读.


大多数QFrame■找了QFrame ::平原 frameShape默认,但HLineVLine的默认frameShape是QFrame::Sunken.这意味着它们不是真正的线条,而是包含用于提供3D效果的中线的薄盒子.从文档:

中线宽度指定框架中间的额外线条的宽度,使用第三种颜色获得特殊的3D效果.请注意,仅针对凸起或凹陷的Box,HLine和VLine帧绘制中线.

如果将frameShape设置为Plain,则此中线仍然可见,并且可以使用color属性设置样式(注意:那不是 a background-colorborder-color!)

但这对于保留默认凹陷外观的HLine/VLine不起作用.解决这个问题的一种方法是使用属性选择器和属性枚举的十进制值(在hehadecimal的文档中描述)为Plain和Sunken QFrame设置单独的样式,如下所示:

/* 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"]
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

但由于适用于带有QFrame :: Sunken的HLine/VLine的样式也适用于那些QFrame::Plain,这通常是浪费.我只是向他们展示了如何使用属性选择器的教育价值.

最好的方法是将QFrame视为它的盒子,并且(1)设置border-topborder-rightmax-height: 0px(或max-width用于VLine)耦合,以确保盒子内部不占用布局中的空间; 或(2)使用背景颜色border: none(在这种情况下,最大高度/宽度应为1或更大,否则QFrame不可见).后者是我推荐的解决方案,如上面的第一个代码块所示.

希望这可以帮助!