我对Qt的样式表功能有一些疑问。这真的很棒,但感觉这个功能已经存在太久了,是吗?这是迄今为止设计GUI的最简单方法。
是否可以在样式表中添加色彩褪色?每当鼠标悬停在某个小部件上时,我不希望它突然改变背景颜色,只是在200ms内淡入新颜色或其他东西。有没有一个很好的方法,或者必须按代码完成?
我可以使用2D渐变吗?我现在知道如何使用1D渐变,您可以在一个轴上逐渐改变颜色(通常是水平或垂直)。我想在其上添加一个第二个渐变,例如具有低alpha值。因此,如果您的渐变从绿色(顶部)变为红色(底部),我还希望它从透明(左)变为白色(右)。
Qt有类型(例如QPushButton)和ID(例如#mywidgetname)的CSS选择器,但我没有找到选择或设置类的方法。我有很多QFrame例如,对于某个子集我想添加一个特定的样式。我应该将我的帧命名为相同的ID(相同的ID)吗?听起来不错。但选择他们的类型(QFrame)也不对......
谢谢!
答案 0 :(得分:6)
不使用我所知道的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; }
答案 1 :(得分:1)
我知道这是一个很老的问题,但最近我遇到了类似的问题。
无论如何,对于“3”我发现你可以在qss中使用“属性选择器”,只需在相关小部件上设置属性值。
e.g。在您的C ++代码中:
widget1->setProperty( "StyleClass", "MyCustomLAF" );
widget2->setProperty( "StyleClass", "MyCustomLAF" );
然后在qss:
QWidget[StyleClass="MyCustomLAF"] { color : purple ; }
然后将“StyleClass”属性设置为“MyCustomLAF”的任何QWidget(或派生类)实例都将应用颜色:紫色样式。如果以下解释有点令人困惑或技术上不正确,请原谅我,但我暗示属性“StyleClass”是Qt所谓的“动态属性”,(在我看来)是指添加到QObject实例的属性在运行时,没有使用Q_PROPERTY宏在“元素”中注册。
答案 2 :(得分:0)
您也可以选择特定父级的所有QFrame
#ParentName > QFrame
将选择所有作为#ParentName
#ParentName QFrame
将选择#ParentName中包含的所有QFrame及其子项