2011-08-23 81 views
12

我在简单的QSS(Qt样式表)中有许多错误。是Qt的错误吗?Qt样式表错误?

实施例:

enter image description here

样式表:

#check1 { 
    color: red     //didn't work here 
} 

#check2 { 
    color: red;     //but work here 
    background-color: black 
} 

#label1 { 
    color: blue; 
    text-decoration: underline //work fine here 
} 

#label2:hover { 
    color: blue; 
    text-decoration: underline //but didn't work here 
} 

来源:

#include <QtGui> 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    app.setStyleSheet(" #check1 {color: red} \ 
         #check2 {color: red; background-color: black} \ 
         #label1 {color: blue; text-decoration: underline} \ 
         #label2:hover {color: blue; text-decoration: underline}"); 
    QWidget w; w.setFixedSize(120,130); 

    QCheckBox check1("checkbox1",&w); 
    check1.setObjectName("check1"); 
    check1.move(10,0); 

    QCheckBox check2("checkbox1",&w); 
    check2.setObjectName("check2"); 
    check2.move(10,30); 

    QLabel label1("label1", &w); 
    label1.setObjectName("label1"); 
    label1.move(10,60); 

    QLabel label2("label2", &w); 
    label2.setObjectName("label2"); 
    label2.move(10,90); 
    w.show(); 

    return app.exec(); 
} 

QT 4.7.3-3; arch linux; GNOME 3回退模式

回答

8

对于第一复选框,问题是某处GTK +样式: enter image description here

QLabelQPushButtonQCheckBox不支持在:hover伪状态CSS选择字体的变化(包括text-decoration)。最简单的部件似乎是QToolButton(如果您真的需要,可以用它来替换QLabels)。
所有小部件都支持该状态的调色板更改(前景和背景颜色和样式)。

4

我不能说什么与你的复选框的问题,但下面的珍闻可以根据Qt的样式表参考文献中找到(我不能在网上找到它,但它在Qt的助手)

QLabel支持盒子模型。不支持:悬停伪状态。

换句话说,不支持QLabel:hover。

+1

但是颜色:蓝色适用于:悬停仍然有效... – TheHorse

+0

你说得对!这很奇怪,因为根据他们的文档,它不应该。然而,我从经验中知道,改变下划线不起作用,因为我试图去做你过去在这里做的事。 – Chris

+0

Qt 4.7 DOES支持悬停http://doc.qt.nokia.com/latest/stylesheet-syntax.html#pseudo-states – spraff

2

而不是

// some comment 

使用

/* some comment */ 

。我想他们选择了后一种形式,因为它不受换行符破坏的影响。

除此之外,如果它仍然不好,那么看起来你已经遇到了错误:https://bugreports.qt-project.org//browse/QTBUG-4307

至于仅设置文本颜色的解决办法,尝试

#check1:hover { color:red; background-color:transparent; } 

这为我工作。

+0

评论已被添加到问题中,它们不存在于源代码中 – TheHorse

+0

@TheHorse:应该在问题中提到过;因为我的答案仍然适用 –

0

不应该

color: red 

color: red; 

缺少分号在您的发布代码中的几个地方。

+1

最后一项之后不需要分号。 – TonyK

+1

...或者它是必需的。 Qt是在解析不是一些浏览器。所以诺基亚有时间以任何方式实施它。我认为一般来说,假设别人标准的每个模糊便利特征都被实现,这是一种坏习惯。如果你看看其他一些Qt类,你总会发现一些没有被实现或以差异方式实现的东西。即使浏览器也没有跟上所有的标准。 – user440297

+0

没有用分号改变 – TheHorse