2012-01-19 188 views
3

我有一個QTableView,我用我自己的模型實現了QAbstractTableModel的子類。我希望能夠在行中的某個字段具有特定值時將行顏色更改爲紅色。我看到很多示例,答案是調用模型setData並使用Qt::BackgroundRole更改背景顏色。由於我的子類我AbstractTableModel重新實現setDatadata所以調用模型setData什麼都不做背景色作用,因爲我只處理數據,其作用是Qt::DisplayRoleQTableView根據值更改行顏色

我想我的第一個問題是:是否有更簡單的方法來改變整個角色的顏色?如果不是,我猜我必須在setDatadata中實現該部分來處理BackgroundRole,我不知道該怎麼做,如果有人有如何做到這一點的例子,它會真的幫助很多...

回答

4

這是比我想象的要簡單......在我的數據的方法我增加了一個支票

​​3210

在,如果塊。我檢查做的值進行比較,看是否這就是行我必須要改變的顏色,如果是我回:

return QVariant(QColor(Qt::red)); 
4

一個更好的答案是使用由view此任務提供了delegate而根本不要碰model。爲什麼模型應該知道你希望視圖的顏色是什麼?如果您希望多個視圖的行爲不同,會發生什麼?等等。

您可以使用setColumnDelegate,或setRowDelegate或一些其他機制。看看這些功能以獲得完整答案。

+0

(絕對真實)的紫外線提示正確的事情!通常看到最終會產生大量技術債務的變通辦法。 – g24l 2016-01-21 12:08:26