设置为只读后更新 QWidget 样式

Updating QWidget style after setting it readonly

我有 QLineEdit 的 Qt 样式 sheet (qss),对只读和可编辑使用不同的样式。工作正常,但如果我将 QLineEdit 切换为只读(在运行时),样式不会改变。

有没有办法强制更新这样的行编辑的样式sheet?

按要求,样式sheet:

QLineEdit {
  background: transparent;
  border: 1px solid green;
  border-radius: 5px;
}

QLineEdit[readOnly="true"] {
  background: rgba(40,40,40);
  border: 1px solid rgba(50,50,50);
}

更改编辑状态后尝试下一个代码:

qApp->style()->unpolish(this);
qApp->style()->polish(this);

其中 "this" 当前 QMainWindow 或 QDialog。

这里是我自己的发现:

  • polish / unpolish 有效
  • 然而,这有点不方便,因为我必须为每个 QLineEdit 对象应用它,如果我在父级别上应用它对我不起作用(例如,在具有多个 [=12] 的对话框中=]s)

对我有用的是像这样强制更新 widget->setStyleSheet(widget->styleSheet());,只需设置相同的样式表即可。我还在顶级小部件上工作,更新多个子元素。