全局样式表尚未完全正常运行

时间:2016-01-26 16:35:45

标签: qt

我正在尝试为所有按钮设置全局样式表。 按照以下特定按钮执行此操作,按预期工作:

button->setStyleSheet(QString("QPushButton:focus {") +
                                  "outline: 0;" +
                                  "background-color: #" + BUTTON_HIGHLIGHT_BG_COLOR  + "; " +
                                  "color: #"            + BUTTON_HIGHLIGHT_TXT_COLOR + "; " +
                              "}"
                     );

但如果我把它变成全球性的,就像这样:

qApp->setStyleSheet(QString("QPushButton:focus {") +
                                  "outline: 0;" +
                                  "background-color: #" + BUTTON_HIGHLIGHT_BG_COLOR  + "; " +
                                  "color: #"            + BUTTON_HIGHLIGHT_TXT_COLOR + "; " +
                            "}"
                   );

聚焦按钮获得正确的字体颜色,但它们似乎没有背景(尽管我为它们设置的背景与主要布局的背景不同。)

BUTTON_HIGHLIGHT_BG_COLORBUTTON_HIGHLIGHT_TXT_COLOR是颜色的字符串(例如“FF0000”)

它可能是什么原因,它适用于特定的小部件,但全局失败?

更新

我跟着@ThorngardSO的回答,最后通过改变来解决它:

stackedWidget->setStyleSheet("background-color: white;");

为:

stackedWidget->setStyleSheet("QStackedWidget { background-color: white; }");

位于加载屏幕(第一个屏幕)

2 个答案:

答案 0 :(得分:3)

你应该尽可能地缩小范围:

  • 这是您的全局样式表中唯一的规则吗?如果没有,请删除所有其他规则以进行测试,看看会发生什么。
  • 清楚地了解按钮的小部件层次(也许它是一个组合框的孩子,它本身就是一个主窗口的孩子),然后检查:
  • 层次结构中的任何小部件都设置了样式表吗?如果是,请删除这些样式表以进行测试,看看会发生什么。
  • 您是否随时在层次结构中的任何小部件上调用setPalette()setAutoFillBackground()等函数(或者在设计器中设置auto-fill-background属性)?如果是,请删除这些电话,看看会发生什么。

答案 1 :(得分:2)

不是说这是你的问题,而是你在运行时从一点一刻组装那个常量字符串。不要那样做。相反,你可以简单地通过将它们放在一起来简单地在C和C ++中连接字符串文字。

qApp->setStyleSheet(QStringLiteral(
  "QPushButton:focus {"
    "outline: 0;"
    "background-color: #" BUTTON_HIGHLIGHT_BG_COLOR  "; "
    "color: #" BUTTON_HIGHLIGHT_TXT_COLOR "; "
  "}"
));

如果您希望颜色在运行时可更改,请使用%-substitution:

qApp->setStyleSheet(QStringLiteral(
  "QPushButton:focus {"
    "outline: 0;"
    "background-color: #%1; "
    "color: #%2; "
  "}"
).arg(background).arg(foreground));