• 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);
  • 相关阅读:
    分布式集群环境下运行Wordcount程序
    VM搭建hadoop分布式集群
    安装运行Hadoop
    网络问题
    Golang依赖工具
    会话进程组终端 · 守护进程
    Golang笔记
    [转]GDB
    [转]用户态与内核态
    【转】linux环境内存分配原理 malloc info
  • 原文地址:https://www.cnblogs.com/GengMingYan/p/15084020.html
Copyright © 2020-2023  润新知