2010-04-21 68 views
1

我有一個繼承QStandardItem的類,並且將元素放在QTreeWidget中。該課程接收來自外部的通知,並且我想根據發生的情況更改該項目的背景顏色。Qt:使用樣式表QStandardItem的背景顏色

如果我不使用樣式表,它工作得很好,像這樣:

void myClass::onExternalEvent() 
{ 
    setBackground(0, QColor(255,0,0))); 
} 

然而,當我把一個樣式表上QTreeWidget,這沒有任何效果:樣式表似乎覆蓋打電話給setBackground()

所以,我想:

void myClass::onExternalEvent() 
{ 
    this->setStyleSheet("background-color: red"); 
} 

但是這可能是完全錯誤的,它改變了我的屏幕上的一些其他元素的顏色,不知道爲什麼。

有沒有人有一個想法,我可以像setBackgroundColor一樣改變背景顏色,但仍然能夠在我的QTreeWidget上使用樣式表?

回答

0

調色板傳播給小部件的孩子,混合和匹配樣式表控件和本地控件是不好的(我沒有後者方便的引用,但我已經在QT文檔的某處讀過它)。

也就是說,試着在QStandardItem派生類上設置setAutoFillBackground(false)

編輯:對不起,你還在樣式表中指定QTreeWidget還是隻設置「background-color:」?如果您僅在樣式表中指定QTreeWidget,那麼也可能會處理它。

QTreeWidget { background-color: white; } 

但我認爲你仍然必須設置autoFillBackground(false)

+0

感謝您的回覆,我沒有得到與setAutoFillBackground任何不同的結果。該文件說,如果有一個樣式表,它將被關閉: http://doc.qt.nokia.com/4.6/qwidget.html#autoFillBackground-prop 事情是,我不想改變完整QTreeWidget的背景,僅適用於小部件內部的特定項目(一行)。我的課是一個QTreeWidgetItem,我想只改變這個項目的顏色。 – Johan 2010-04-22 11:02:33