Qt 样式表错误?

Posted

技术标签:

【中文标题】Qt 样式表错误?【英文标题】:Qt style sheets bugs? 【发布时间】:2011-11-02 05:51:03 【问题描述】:

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

例子:

样式表:

#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;拱Linux; gnome 3 后备模式

【问题讨论】:

【参考方案1】:

代替

// some comment

使用

/* some comment */

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

除此之外,如果还是不行,那么你似乎遇到了错误:https://bugreports.qt-project.org//browse/QTBUG-4307。

作为仅设置文本颜色的解决方法,请尝试

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

这对我有用。

【讨论】:

评论只在问题中添加,它们在源代码中不存在 @TheHorse:应该在问题中提到;照原样,我的回答仍然适用【参考方案2】:

对于第一个复选框,问题出在 Gtk+ 风格的某个地方:

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

【讨论】:

【参考方案3】:

不应该

color: red

color: red;

?

您发布的代码中的一些地方缺少分号。

【讨论】:

最后一项后不需要分号。 ...或者它可能是必需的。 Qt 正在解析而不是某些浏览器。因此,诺基亚可以以他们有时间的任何方式实施它。我认为一般来说,假设其他人标准的每个模糊的便利功能都已实现是一个坏习惯。如果您查看其他一些 Qt 类,您总会发现一些未实现或以差异方式实现的东西。甚至浏览器也跟不上所有标准。 分号没有改变 @user440297:我不只是+建议+可能不需要分号。见htmlhelp.com/reference/css/structure.html。 Qt Doc 示例全部省略最后一个分号:qt-project.org/doc/qt-4.8/stylesheet-syntax.html【参考方案4】:

我不能说你的复选框有什么问题,但是根据Qt的样式表参考可以找到以下花絮(我在网上找不到,但它在Qt助手中)

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

也就是说,不支持 QLabel:hover。

【讨论】:

你是对的!这很奇怪,因为根据他们的文档,它不应该。但是,我确实从经验中知道,更改下划线不起作用,因为我过去曾尝试完全按照您在此处所做的操作。 Qt 4.7 支持悬停doc.qt.nokia.com/latest/stylesheet-syntax.html#pseudo-states 我不是说Qt不支持悬停伪状态,我说它不支持QLabels

以上是关于Qt 样式表错误?的主要内容,如果未能解决你的问题,请参考以下文章

qt 样式表基本用法

11Qt样式表

QT +样式表

15Qt 样式表

QT中 checkBox怎么设置样式表,使我选中时,背景图片改变

Qt设置样式