原文鏈接
https://blog.csdn.net/qq_31073871/article/details/118212825
訂閱專欄
設置樣式表無非兩種方式,1是直接在ui設計師界面填寫,這樣所見即所得,2是用代碼setStylesheet。
不過令人困惑的是,經常設置了樣式表之后,運行出的結果與預期不符,總結可能有以下原因:
1、子控件如果設置了樣式表,那么他會把從父控件送來的【同選擇器】下的樣式表覆蓋。
注:【樣式表選擇器】是專業術語,請自行搜索學習。
2、子類如果設置了樣式表,那么從父類繼承來的【同選擇器】下的樣式表覆蓋。
注:子類和子控件不是一個概念。子控件是QWidget的樹狀關系。
3、子類化QWidget后的類,設置樣式表無效。
官方手冊已經特別指出了這個問題,解決方案是,在QWidget的子類中覆蓋painterEvent函數
4、UI設計師界面設置過qss,而后又把編輯樣式表的框刪干凈了。這不算完,因為屬性列表會顯示為粗體,這樣qt會自動生成這種空樣式表的代碼: this->setStyleSheet(""); 要想真正刪除,必須點擊還原按鈕。
這一點相當隱蔽,需要特別檢察。
5、用代碼設置的qss會覆蓋在ui設計師界面填寫的【同選擇器】下的qss。因為我們常把自己的代碼,在構造函數中,放到qt自動生成的 ui->setupUi(this); 后面。如果你調換了順序,那就是代碼設置的qss無效,而ui設計師設置的有效。
31073871/article/details/118212825