qt 记录调用setStyleSheet设置样式后不生效问题
遇见两种调用setStyleSheet方法样式不生效问题:
直接调用setStyleSheet样式部分生效,部分不生效
问题代码:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); QFile file("://qss.qss"); file.open(QIODevice::ReadOnly); setStyleSheet(file.readAll()); file.close(); }
://qss.qss 是qss 样式文件
运行后大部分样式不生效,只有主窗体生效, 后经排查,是因为对主窗体 UI右键-> 改变样式表... 这样设置过一个字体样式-_-!
估计因为这样显示设置样式,覆盖了MainWindows构造中调用setStyleSheet函数设置的样式了,有两种解决办法:
1. 统一使用qss文件管理样式,去掉通过ui界面改变样式表方式修改样式
2. 把设置样式操作,放在ui->setupUi(this)之前,像这样:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { QFile file("://qss.qss"); file.open(QIODevice::ReadOnly); setStyleSheet(file.readAll()); file.close(); ui->setupUi(this); }
推荐使用第一种方式,统一使用qss文件管理样式,如果没有在ui中显示设置样式(ui中的编辑样式表窗口编辑样式),在把setStyleSheet放在ui->setupUi之前时,样式也会不生效。
控件调用setStyleSheet或设置class属性,改变样式不生效
ui->btnModelAssess->setProperty("class", "btnNormal"); //或者 ui->btnModelAssess->setStyleSheet("border: 1px solid #333");
如果这样不生效,可以尝试在设置样式前后分别调用style()->unpolish和style()->polish 刷新
style()->unpolish(ui->btnModelAssess); ui->btnModelAssess->setProperty("class", "btnNormal"); //或者 ui->btnModelAssess->setStyleSheet("border: 1px solid #333"); style()->polish(ui->btnModelAssess);