不,不可能按照你想要的方式覆蓋QSS
屬性,相信我,你不想。這不是您撥打setStyleSheet
重要的順序。首先重要的是層次結構。呼叫順序僅對位於同一級別上的小部件起作用。
原因是小部件的內部樣式規則定義了重寫父類的樣式,因此應用程序樣式在您的情況下。這是一個尊重的層次結構。你可以看一下這個通過以下方式:
假設你有以下子層次結構QWidget
:
QWidget
|__QPushButton
|
|__QFrame
| |
| |_QListView
|
|__QProgressBar
比方說,你想要的background-color
定製層次結構中的所有部件。如果對QApplication::setStyleSheet()
的調用會覆蓋子級的樣式表屬性,那麼您將無法爲子級設置自定義樣式。這就是爲什麼子部件的QSS
屬性會覆蓋父部件的QSS
屬性。
看看它像通常的方式來看待小部件。在QWidget
的頂部顯示QPushButton
。 QFrame
顯示在QWidget
之上。 QListView
也顯示在QWidget
之上。樣式以相同的方式應用。
我推薦的做法是隻有一個外部的QSS
文件,您可以在其中定義所需的一切。
編輯: 作爲N1ghtLight
指出QSS
蜜餞類的繼承層次結構,所以如果你設置一個屬性一類的所有派生類將繼承財產。例如,如果您有以下樣式:
QAbstractButton {
background-color: red;
}
QPushButton {
color: blue;
}
所有QPushButtons
將背景色red
和QAbstractButton
文本顏色blue
作爲QPushButton
繼承background-color
屬性值是其祖先而QAbstractButton
S的不QPushButton
s會有背景色red
,但文字顏色將保持不變。
上面的例子使用了一個類型選擇器。您可以使用不同的選擇器類型將樣式應用於特定的對象。您可以看到不同的選擇器類型here。
你的按鈕應該是藍色的,因爲應用程序。setStyleSheet應該重新設計小部件,可以顯示完整的樣式表嗎? – Chernobyl 2014-09-29 15:42:53
@Olumide你確定你的樣式表加載正確嗎? – 2014-09-29 16:11:04
@ N1ghtLight我確定樣式表加載正確。實際上,我打開樣式表文件並將其內容寫入'QApplication :: setStyleSheet()' – Olumide 2014-09-29 16:12:52