我發現這個問題:How to change the background color for a QTreeView Header (aka QHeaderView)?我是否需要實現我自己的QAbstractTableModel?
我希望能夠設置每個標題部分的顏色。所以上面看到的問題似乎是我的解決方案!
解決方案說「做到這一點的最簡單的方法可能是獲得從化QAbstractItemModel或一個新的模型的另一個模型類,並重新實現headerData()」。我去和looked at the Qt source tree for QTableWidget, QTableModel, QTableWidgetItem ...這些類被認爲是「默認模型」,所以我認爲他們將是一個很好的例子,然後我會去實現我自己的QAbstractTableModel。
我看到的3個文件是高達3300行代碼。這絕對不是「最簡單的方式」IMO!
我想QTableWidget的的功能,但後來我想添加下列能力:
- horizontalHeader.setSectionColor(索引顏色)
- verticalHeader.setSectionColor(索引顏色)
我是否真的需要繼承/實現QAbstractTableModel,如果我只想改變節頭的顏色?
更新:我沒有使用自己的自定義視圖和模型類
。我正在使用the convenience class QTableWidget(它被稱爲便利類b/c它實現了視圖和模型)。功能headerData()
是模型的一部分。 model class, QTableModel,不能通過Qt lib/headers訪問,所以我不能從它繼承。
更新:
我試圖創建與背景刷QBrush(QColor(Qt::red))
一個新的項,然後用新的項(使用QTableWidget::setHorizontalHeaderItem(int column, QTableWidgetItem *item)
設置表的標頭我還試圖繼承QTableWidgetItem
並與重寫虛擬data()
方法:
QVariant HeaderItem::data(int role) const
{
if(role==Qt::BackgroundRole) {
return QVariant(QBrush(QColor(Qt::red)));
} else if(role==Qt::ForegroundRole) {
return QVariant(QBrush(QColor(Qt::green)));
} else {
return QTableWidgetItem::data(role);
}
}
我可以改變頭部分前景。但是,當我嘗試改變標題的背景畫筆...沒有任何反應......它就像QTableWidgetI我爲標題部分設置的背景畫筆被忽略。
爲什麼你不能只重寫視圖使用的模型的headerData方法?您的確切設置是什麼,即您使用的是哪個小部件和哪些模型類? – chalup 2012-02-19 10:28:43
@chalup我爲你更新了問題。 – 2012-02-19 17:36:04
也許提供自定義QHeaderView會做的伎倆...我會試試看。 – 2012-02-21 16:25:32