2013-09-25 55 views
2

我正在使用QTableView和從QAbstractTableModel()繼承的自定義模型。該模型根據顯示的值更改某些單元格的背景顏色的前景&。 我已經設置了選擇行爲來選擇整個行。在QTableView中選定行的自定義顏色

問題是,當我選擇一行時,整行的背景顏色變爲標準橙色,文本顏色變爲白色。一旦我刪除了選擇,它將恢復到模型設置的內容。

我想要做的是,當用戶選擇一行,其前景&背景顏色不應改變。

我試着設置QPalette,但我無法找到實現上述的方法。

我在C++中使用Qt 5.1.0(32位)。

+3

您是否嘗試在視圖的調色板中設置'QPalette :: Highlight'和'QPalette :: HighlightedText'角色的值? –

+0

是的,我做了,但我使用QPalette :: HighlightedText設置的顏色生效,但我使用QPalette :: Highlight設置的顏色不生效。 – javed

回答

1

你可以在你的表視圖類如下:

const QColor hlClr = Qt::red; // highlight color to set 
const QColor txtClr = Qt::white; // highlighted text color to set 

QPalette p = palette(); 
p.setColor(QPalette::Highlight, hlClr); 
p.setColor(QPalette::HighlightedText, txtClr); 
setPalette(p); 
+1

我已經嘗試過這個,但奇怪的是,背景顏色從未改變。儘管如此,突出顯示的行的文本顏色會改變爲使用調色板設置的顏色。 – javed

+0

爲我工作,我正在使用Qt 5.7 – Rinat

0

QTableView中和QTreeView則使用QStyledItemDelegate將忽略調色板,因爲它只是呈現高亮行暗。至少,我在使用交替行顏色時注意到了這一點,但它也適用於靜態行顏色。

現在,您可以使用QItemDelegate(看起來很糟糕,但沒有懸停高亮顯示),或者您可以使用樣式表覆蓋該行爲。我更喜歡後者:

setStyleSheet("QTreeView::item:selected{background-color: palette(highlight); color: palette(highlightedText);};"); 

這將使所選項目的背景藍色和黑色的文本顏色在我的Windows 8.1。現在您可以在調色板中舒適地設置突出顯示和突出顯示文本以獲得其他顏色。