[英]Forcing a recalcuation of Qt Stylesheet appears to do nothing
使用样式表,我试图更改窗口的样式,包括所有子项。
所有子项均使用setObjectName
进行命名,并且样式表使用相同的名称来更改命名小部件的样式(以及一些不需要更改的摘录)。 我正在通过首先将值插入到std::map
,将名称(例如QWidget#hello!hover
映射到一组键值对(例如background-color
到#0f0f0f
来重新计算样式表。 即["QWidget#hello!hover"]["background-color"] = "#0f0f0f"
,将是一个条目。
更改样式表映射后,我将重新计算整个样式表,并在主窗口小部件上使用setStyleSheet
对其进行设置,并在顶部添加/* */
(假定这将强制重新计算样式表)。 但是,这似乎没有任何作用。
这样做,在主窗口小部件的构造函数中可以正常工作,但是一开始设置后什么也不做。
我计算出的样式表是有效的,并且所有条目都按我期望的方式排序,所有小部件都具有预期的名称,并且由于它是我第一次设置时起作用的,因此我怀疑问题在于新样式表具有没有影响,或者对孩子没有影响。
我正在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);
一切都像魅力。 所做的更改非常罕见,并且窗口中没有很多东西,因此执行此操作的成本并不算太大-我相信可以更高效地完成此操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.