Qt样式表;褪色,2D渐变和CSS类

时间:2010-09-22 23:48:51

标签: qt stylesheet qt-creator qt-designer qtstylesheets

我对Qt的样式表功能有一些疑问。这真的很棒,但感觉这个功能已经存在太久了,是吗?这是迄今为止设计GUI的最简单方法。

  1. 是否可以在样式表中添加色彩褪色?每当鼠标悬停在某个小部件上时,我不希望它突然改变背景颜色,只是在200ms内淡入新颜色或其他东西。有没有一个很好的方法,或者必须按代码完成?

  2. 我可以使用2D渐变吗?我现在知道如何使用1D渐变,您可以在一个轴上逐渐改变颜色(通常是水平或垂直)。我想在其上添加一个第二个渐变,例如具有低alpha值。因此,如果您的渐变从绿色(顶部)变为红色(底部),我还希望它从透明(左)变为白色(右)。

  3. Qt有类型(例如QPushButton)和ID(例如#mywidgetname)的CSS选择器,但我没有找到选择或设置类的方法。我有很多QFrame例如,对于某个子集我想添加一个特定的样式。我应该将我的帧命名为相同的ID(相同的ID)吗?听起来不错。但选择他们的类型(QFrame)也不对......

  4. 谢谢!

3 个答案:

答案 0 :(得分:6)

  1. 不使用我所知道的CSS。但是,Qt有几个使用不同技术的漂亮演示(使用动画框架),例如参见演示/示例浏览器。

  2. 通过使用以下构造使用端点的相对坐标,您可以在#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),你可能想玩这个,看看它是什么,并用它来获取灵感。

  3. 不太确定如何最好地解决此问题,但您可以在同一规则之前放置多个匹配项,因此您可以拥有:

    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

子项的QFrame

#ParentName QFrame将选择#ParentName中包含的所有QFrame及其子项