QT样式表;颜色褪色,2D梯度和CSS类
-
04-10-2019 - |
题
我对QT的样式表功能有一些疑问。真的很棒,但是感觉该功能还没有太久了,真的吗?到目前为止,这是最简单的造型我的GUI的方法。
是否可以在样式表中添加颜色褪色?每当鼠标徘徊在某个小部件上时,我都不希望它突然更改背景颜色,只需在200ms或其他东西中淡入新颜色。是否有一个很好的方法,或者必须在代码方面完成此操作?
我可以有2D梯度吗?我知道现在如何使用1D梯度,您可以在一个轴上逐渐更改颜色(通常是水平或垂直)。我想添加一个 第二 最重要的是,其具有较低的alpha值。因此,如果您的梯度从绿色(顶部)到红色(底部),我也希望它从透明(左)变为白色(右)。
QT具有用于类型(例如qpushbutton)和ID(例如#MyWidgetName)的CSS选择器,但我尚未找到选择或设置类的方法。例如,我有许多Qframes,对于某个子集,我想添加一种特定的样式。我应该给我的帧命名全部相同(相同的ID)吗?听起来很糟糕。但是选择其类型(QFrame)也不正确...
谢谢!
解决方案
不使用我知道的CSS。但是,QT使用不同的技术(使用动画框架)具有多个不错的演示,例如,请参见演示/示例浏览器。
您可以通过使用端点的相对坐标使用以下构造来实现#2中想要的东西:
qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0.273, stop:0 rgba(0, 0, 0, 255), stop:1 rgba(255, 255, 255, 255))
QT Designer有一位出色的编辑器(以及CSS的一般),您可能想使用它,看看它的内容并将其用于灵感。
不太确定如何最好地解决这个问题,但是您可以将多个匹配项放在同一规则之前,因此您可以拥有:
QFrame#frame1, QFrame#frame2 { background-color: blue; }
其他提示
我知道这是一个非常古老的问题,但是我最近也有类似的问题。
无论如何,对于“ 3”我发现您可以在QSS中使用“属性选择器”,然后在相关的小部件上设置属性值。
例如,在您的C ++代码中:
widget1->setProperty( "StyleClass", "MyCustomLAF" );
widget2->setProperty( "StyleClass", "MyCustomLAF" );
然后在QSS中:
QWidget[StyleClass="MyCustomLAF"] { color : purple ; }
然后,将设置为“ mycustomlaf”的“ Styleclass”属性的任何Qwidget(或派生类)实例都将具有颜色:应用紫色样式。如果以下解释有点令人困惑或技术不正确,请原谅我在运行时,不使用q_property宏未在“元数据”中注册。
另外,您可以选择特定父母的所有Qframes
#ParentName > QFrame
将选择所有是#ParentName的孩子
#ParentName QFrame
将选择#ParentName中包含的所有Qframes,它的孩子