2

我对 Qt 的样式表功能有一些疑问。这真的很棒,但感觉这个功能还没有出现太久,真的吗?不过,这是迄今为止最简单的方式来设置我的 GUI 样式。

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

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

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

谢谢!

4

3 回答 3

9
  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; }
    
于 2010-09-23T09:53:18.680 回答
1

我知道这是一个很老的问题,但我最近遇到了类似的问题。

无论如何,对于“3”。我发现您可以在 qss 中使用“属性选择器”,只需在相关小部件上设置属性值。

例如在您的 C++ 代码中:

widget1->setProperty( "StyleClass", "MyCustomLAF" );
widget2->setProperty( "StyleClass", "MyCustomLAF" );

然后在qss中:

QWidget[StyleClass="MyCustomLAF"] { color : purple ; }

然后,任何将“StyleClass”属性设置为“MyCustomLAF”的 QWidget(或派生类)实例都将应用 color:purple 样式。如果以下解释有点令人困惑或在技术上不正确,请原谅我,但我暗示属性“StyleClass”是 Qt 所说的“动态属性”,(用我的话)意味着添加到 QObject 实例的属性在运行时,无需使用 Q_PROPERTY 宏在“元内容”中注册。

于 2016-05-18T02:02:22.150 回答
0

您还可以为特定父级选择所有 QFrame

#ParentName > QFrame将选择所有属于#ParentName 子级的 QFrame

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

于 2010-09-23T14:24:50.097 回答