Qt 全局样式表不是';他不能完全工作

Qt 全局样式表不是';他不能完全工作,qt,Qt,我正在尝试为我所有的按钮设置一个全局样式表。 按如下所示对特定按钮执行此操作,效果与预期一致: button->setStyleSheet(QString("QPushButton:focus {") + "outline: 0;" + "background-color: #" + BUTTON_HIGHLIGHT_BG_COLOR + "; " +

我正在尝试为我所有的按钮设置一个全局样式表。 按如下所示对特定按钮执行此操作,效果与预期一致:

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\u HIGHLIGHT\u BG\u COLOR
BUTTON\u HIGHLIGHT\u TXT\u COLOR
是颜色字符串(例如“FF0000”)

是什么原因导致它适用于特定的小部件,但在全局范围内失败

更新:

我遵循@ThorngardSO的答案,最终通过改变来解决:

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


这是在加载屏幕(第一个屏幕)

中,这不是您的问题,而是您正在运行时从位和块组装恒定字符串。不要那样做。相反,您可以简单地将C和C++中的字符串文字串接在一起,简单地将它们放在一起。
qApp->setStyleSheet(QStringLiteral(
  "QPushButton:focus {"
    "outline: 0;"
    "background-color: #" BUTTON_HIGHLIGHT_BG_COLOR  "; "
    "color: #" BUTTON_HIGHLIGHT_TXT_COLOR "; "
  "}"
));
如果希望颜色在运行时可以更改,请使用以下选项:

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

这并不是你的问题,而是你在运行时用零碎的东西组装那个常量字符串。不要那样做。相反,您可以简单地将C和C++中的字符串文字串接在一起,简单地将它们放在一起。
qApp->setStyleSheet(QStringLiteral(
  "QPushButton:focus {"
    "outline: 0;"
    "background-color: #" BUTTON_HIGHLIGHT_BG_COLOR  "; "
    "color: #" BUTTON_HIGHLIGHT_TXT_COLOR "; "
  "}"
));
如果希望颜色在运行时可以更改,请使用以下选项:

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

你应该尽量缩小范围:

  • 这是全局样式表中唯一的规则吗?如果没有,请删除所有其他用于测试目的的规则,然后看看会发生什么
  • 清楚地掌握按钮的小部件层次结构(可能是groupbox的子项,而groupbox本身就是主窗口的子项),然后选中:
  • 层次结构中的任何小部件都有样式表集吗?如果是,删除这些样式表以进行测试,然后看看会发生什么
  • 您是否随时在层次结构中的任何小部件上调用函数,如
    setPalette()
    setAutoFillBackground()
    (或在设计器中设置自动填充背景属性)?如果是,请删除这些呼叫并查看发生了什么

您应该尽量缩小范围:

  • 这是全局样式表中唯一的规则吗?如果没有,请删除所有其他用于测试目的的规则,然后看看会发生什么
  • 清楚地掌握按钮的小部件层次结构(可能是groupbox的子项,而groupbox本身就是主窗口的子项),然后选中:
  • 层次结构中的任何小部件都有样式表集吗?如果是,删除这些样式表以进行测试,然后看看会发生什么
  • 您是否随时在层次结构中的任何小部件上调用函数,如
    setPalette()
    setAutoFillBackground()
    (或在设计器中设置自动填充背景属性)?如果是,请删除这些呼叫并查看发生了什么

即使我写下“背景色:红色;”,它也不起作用。还要注意,
font-color
是有效的。无论如何,这并不是问题的答案。。。应该是一个comment@AlaaM如果只有注释可以这么长:)即使我写了
“background color:red;”
,它也不起作用。还要注意,
font-color
是有效的。无论如何,这并不是问题的答案。。。应该是一个comment@AlaaM如果评论能这么长就好了:)1。我只有2条全球规则,把它缩小到1条,没有帮助。2.它是
组框的子项,该组框是主窗口的子项。3.
groupbox
本身有一个样式表-我删除了它,另一个
QLabel
的子项有一个样式表-删除了它。没有帮助。4.五号。让我感到奇怪的是,它在
按钮->设置样式表上工作…
但在
qApp->设置样式表上不工作它工作了!我在加载屏幕上有一个
stackedWidget->setStyleSheet
。我知道问题是从哪里来的。谢天谢地,它成功了——样式表的级联/继承通常会导致一开始看起来很奇怪的行为。1。我只有2条全球规则,把它缩小到1条,没有帮助。2.它是
组框的子项,该组框是主窗口的子项。3.
groupbox
本身有一个样式表-我删除了它,另一个
QLabel
的子项有一个样式表-删除了它。没有帮助。4.五号。让我感到奇怪的是,它在
按钮->设置样式表上工作…
但在
qApp->设置样式表上不工作它工作了!我在加载屏幕上有一个
stackedWidget->setStyleSheet
。我知道问题是从哪里来的。感谢它的成功——样式表的级联/继承通常会导致一开始看起来非常奇怪的行为。