【问题标题】:How can I restore default system value of a QSS property?如何恢复 QSS 属性的默认系统值?
【发布时间】:2019-06-21 13:21:08
【问题描述】:

Qt QSS 被传播给子级,如果一个父级将其样式表设置为color: red,则其所有子级都将应用此样式表。如果您明确设置QLabel {color: red},则只会关注 QLabel 孩子。

如果孩子设置了自己的值children->setStyleSheet("color: blue");,则可以覆盖样式表,但我找不到将属性重置为默认值的方法。系统或 Qt 设置的值,如果我们没有在任何父样式表中设置此属性。

我怎样才能实现children->setStyleSheet("color: default"); 之类的东西?

【问题讨论】:

  • 在我的项目中,我通过设置值使用args 破解了它,例如children->setStyleSheet(QString("color : %1).arg(oColorStr));

标签: qt qtstylesheets


【解决方案1】:

通常情况下,您不需要这样做。父小部件可以有一些复杂的样式表,这样它就不会以任何不希望的方式影响子小部件。我更喜欢将这些样式存储在资源文件中,这是一种常见的方式。

但是 AFAIK 你总是可以将样式表设置为空字符串,例如:

children->setStyleSheet("");

有时,在某些平台(主要是 Windows)上,小部件重置它们的外观,但不会获得所有的系统样式(在 Windows 上它们会变得灰色、角落和沉闷),并非总是如此,但发生。

如果动态应用了某些样式表而您没有得到结果,“官方 crutchy 样式更新”会有所帮助,例如:

someWidget->style()->unpolish(someWidget);
someWidget->style()->polish(someWidget);

【讨论】:

  • 正如我在问题中所说,父母的样式表确实会影响孩子。子样式表与继承的样式表合并,然后将其设置为空字符串没有任何区别。 unpolish/polish 技巧没有任何区别,因为为此考虑了样式表。无论如何,我的问题不是如何忽略父母的样式表,而是如何重置样式表的特定属性
  • @ymoreau,我的错,没有做对。但是你不能仅仅依靠那些“级联规则”来修复你所有的 QSS 吗? -- 我的意思是,父样式表中的选择器可能更通用,例如QLabel {color: red; },而子样式表将包含覆盖的内容,例如#thatExactLabel { color: green; },甚至类似#someContainer > QLabel { color: black; }。这不是一个随机的猜测,这个覆盖对我有用,虽然不确定是否适合你的情况,当然。
  • 这是一个更笼统的问题,当然有时有办法解决它,但这通常意味着您知道要使用什么值来覆盖。如果您只想要默认的系统值怎么办?唯一的方法是在任何地方设置你的特定值,但在你想要默认值的地方,这可能意味着大量的复制/粘贴。
猜你喜欢
  • 2015-10-31
  • 2012-03-04
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
  • 2013-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多