【问题标题】:Qt style sheets bugs?Qt 样式表错误?
【发布时间】: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 后备模式

【问题讨论】:

    标签: qt user-interface styles stylesheet


    【解决方案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不支持悬停伪状态,我说它不支持QLabels
      猜你喜欢
      • 2018-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 2015-09-19
      相关资源
      最近更新 更多