2012-02-19 106 views
0

我發現這個問題: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的的功能,但後來我想添加下列能力:

  • horizo​​ntalHeader.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我爲標題部分設置的背景畫筆被忽略。

+0

爲什麼你不能只重寫視圖使用的模型的headerData方法?您的確切設置是什麼,即您使用的是哪個小部件和哪些模型類? – chalup 2012-02-19 10:28:43

+0

@chalup我爲你更新了問題。 – 2012-02-19 17:36:04

+0

也許提供自定義QHeaderView會做的伎倆...我會試試看。 – 2012-02-21 16:25:32

回答

相關問題