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
。我知道问题是从哪里来的。感谢它的成功——样式表的级联/继承通常会导致一开始看起来非常奇怪的行为。