c++ - 强制重新计算 Qt 样式表似乎无济于事

标签 c++ css qt

我正在尝试使用样式表更改窗口的样式,包括所有子项。

使用 setObjectName 命名所有子项,样式表使用相同的名称来更改命名小部件的样式(以及一些永远不需要更改的摘录)。我通过首先将值插入 std::map,将名称(例如 QWidget#hello!hover)映射到一组键值对来重新计算样式表,例如 background-color#0f0f0f。 IE。 ["QWidget#hello!hover"]["background-color"] = "#0f0f0f",将是一个条目。

当样式表映射改变时,我重新计算整个样式表并在主小部件上使用 setStyleSheet 设置它,在顶部添加 /* */(据推测,这应该强制重新计算样式表)。但是,这似乎根本没有做任何事情。

这样做,在主小部件的构造函数中工作正常,但一旦开始设置就不会执行任何操作。

我计算的样式表是有效的并且所有条目都按照我期望的方式排序,所有小部件都有预期的名称并且因为它在我第一次设置它时起作用,我怀疑问题是要么新样式表没有效果,或者它对 child 根本没有影响。

我在 Windows 10 上使用 Qt 5.4(最初为 Qt3 开发的旧垃圾软件)。

我该如何解决这个问题?

最佳答案

我通过在主小部件的所有子部件上设置样式表来解决这个问题。在计算出新的样式表并将其存储在名为 stylesheetQString 中之后,我使用了:

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/

相关文章:

css - 如何使网页在不同屏幕上看起来相同?

javascript - Qualtrics - 在目录按钮下方添加页脚

c++ - 打印完成后如何从打印机获取 Qt 信号?

c++ - 单击聚焦小部件时的聚焦事件

c++ - 可以从 QXmlStreamWriter 获取 QDomElement 吗?

c++ - 添加图像C++后发送文本到按钮

c++ - 您可以在类的初始化列表中使用 Lambda 吗?

javascript - 使用 Javascript、CSS 和 HTML 进行三 Angular 形定位(欢迎使用其他方法)

c++ - 用zlib提取一个gz文件内容并保存

c++ - 如何测量低延迟 C++ 应用程序的延迟