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);
原文地址:https://www.cnblogs.com/GengMingYan/p/15084020.html