设置为只读后更新 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());
,只需设置相同的样式表即可。我还在顶级小部件上工作,更新多个子元素。
我有 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());
,只需设置相同的样式表即可。我还在顶级小部件上工作,更新多个子元素。