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);
分类:
C/C++
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!