2009-04-16 455 views
1

在下面的屏幕截圖中有兩個QTreeViews。對於右邊的那個,我添加了一個css自定義:QTreeView樣式表自定義問題與滾動條

setStyleSheet(
    "background-color: #EAF5FF;" 
    "alternate-background-color: #D5EAFF;" 
); 

但是請注意,滾動條的外觀已經改變。它轉到了「windows」風格,而不是「windowsxp」風格(這是默認的,因爲我是在Xp下開發的)。

如何使用上面的樣式設置,而無需改變滾動條的外觀?

我使用QT 4.5和Windows XP。

ScreenShot

回答

2

要去的QPalette路線的建議制定。這裏是解決方案:

#if 0 // this causes the problem 
    setStyleSheet(
     "background-color: #EAF5FF;" 
     "alternate-background-color: #D5EAFF;" 
    ); 
#else // this works correctly 
    QPalette p = palette(); 
    p.setColor(QPalette::Base, QColor(qRgb(0xEA, 0xF5, 0xFF))); 
    p.setColor(QPalette::AlternateBase, QColor(qRgb(0xD5, 0xEA, 0xFF))); 
    setPalette(p); 
#endif 

這兩種方法應該根據文檔工作,所以我會說它的Qt錯誤。

編輯:用這種新方法在過去幾天的工作之後,我注意到有可能的性能提高。

3

你需要的CSS定製給你的能力之一,超出了可以直接做?爲了改變顏色,你可以直接使用小部件的調色板,它應該保留你的風格。

另外請記住,風格的變化是繼承的,所以如果包含在右邊的樹中的任何小部件有不同的風格不是包含在左邊的樹中的任何一個,可能導致的變化,以及。

除此之外,我會認爲,這似乎是一個Qt的bug,如果確實是唯一的區別是在CSS樣式表。