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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM