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);

 

posted @   耿明岩  阅读(6167)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
希望能帮助到你,顺利解决问题! ...G(^_−)☆
点击右上角即可分享
微信分享提示