遇見兩種調用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);