我正在尝试使用样式表更改窗口的样式,包括所有子项。
使用 setObjectName
命名所有子项,样式表使用相同的名称来更改命名小部件的样式(以及一些永远不需要更改的摘录)。我通过首先将值插入 std::map
,将名称(例如 QWidget#hello!hover
)映射到一组键值对来重新计算样式表,例如 background-color
到 #0f0f0f
。 IE。 ["QWidget#hello!hover"]["background-color"] = "#0f0f0f"
,将是一个条目。
当样式表映射改变时,我重新计算整个样式表并在主小部件上使用 setStyleSheet
设置它,在顶部添加 /* */
(据推测,这应该强制重新计算样式表)。但是,这似乎根本没有做任何事情。
这样做,在主小部件的构造函数中工作正常,但一旦开始设置就不会执行任何操作。
我计算的样式表是有效的并且所有条目都按照我期望的方式排序,所有小部件都有预期的名称并且因为它在我第一次设置它时起作用,我怀疑问题是要么新样式表没有效果,或者它对 child 根本没有影响。
我在 Windows 10 上使用 Qt 5.4(最初为 Qt3 开发的旧垃圾软件)。
我该如何解决这个问题?
最佳答案
我通过在主小部件的所有子部件上设置样式表来解决这个问题。在计算出新的样式表并将其存储在名为 stylesheet
的 QString
中之后,我使用了:
QList<QWidget*> children = findChildren<QWidget*>();
for (QList<QWidget*>::iterator child = children.begin(); child != children.end(); ++child);
(*child)->setStyleSheet(stylesheet);
一切都很顺利。更改非常少见,窗口中也没有太多内容,因此这样做的成本并不是什么大问题——我相信它可以更有效地完成。
关于c++ - 强制重新计算 Qt 样式表似乎无济于事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45752993/