【发布时间】:2018-01-26 22:11:12
【问题描述】:
使用样式表我正在尝试更改窗口的样式,包括所有子窗口。
所有子项都使用setObjectName 命名,样式表使用相同的名称来更改命名小部件的样式(以及一些永远不需要更改的摘录)。我正在重新计算样式表,首先将值插入std::map,将名称(例如QWidget#hello!hover)映射到一组键值对,例如background-color 到#0f0f0f。 IE。 ["QWidget#hello!hover"]["background-color"] = "#0f0f0f",将是一个条目。
当样式表映射发生变化时,我会重新计算整个样式表,并在主窗口小部件上使用setStyleSheet 设置它,并在顶部添加/* */(据推测,这应该会强制重新计算样式表)。但是,这似乎根本没有做任何事情。
这样做,在主小部件的构造函数中可以正常工作,但一旦设置它就不会做任何事情。
我计算的样式表是有效的,并且所有条目都按照我期望的方式排序,所有小部件都有预期的名称,并且由于它在我第一次设置它时工作,我怀疑问题是要么新的样式表没有效果,或者它对孩子没有效果。
我在 Windows 10 上使用 Qt 5.4(最初为 Qt3 开发的旧垃圾软件)。
我该如何解决这个问题?
【问题讨论】:
-
没有确切的例子很难说,但是。 1)尝试默认使用“Fusion”风格。 2) 要“重新加载”样式表,您需要调用
w->polish();w->unpolish();而不重置样式表。 3)你的CSS看起来很奇怪。是伪代码吗? -
@DmitrySazonov 如果仅通过在所有子项上设置样式表来解决问题。