![](/img/trans.png)
[英]Do I need to implement my own destructors for my derived classes if they don't contain static data?
[英]Do I need to implement my own QAbstractTableModel?
我發現了這個問題: 如何更改QTreeView標頭(又名QHeaderView)的背景色?
我希望能夠為每個標題部分設置顏色。 因此,上面看到的問題似乎是我的解決方案!
解決方案說:“ 最簡單的方法可能是從QAbstractItemModel或另一個模型類派生新模型並重新實現headerData()”。 我去看了QTableWidget,QTableModel,QTableWidgetItem的Qt源代碼樹 ……這些類被認為是“默認模型”,所以我認為它們將是一個很好的例子,然后我將實現自己的QAbstractTableModel。
我看到的3個文件是3300行代碼。 這絕對不是IMO的“最簡單方法”!
我想要QTableWidget的功能,但是我想添加以下功能:
如果我只想更改節標題的顏色,是否真的需要繼承/實現QAbstractTableModel嗎?
更新:
我沒有使用自己的自定義視圖和模型類。 我現在正在使用便捷類QTableWidget (它被稱為便捷類b / c,它實現了視圖和模型)。 函數headerData()
是模型的一部分。 無法通過Qt lib / header訪問模型類QTableModel,因此無法從其繼承。
更新:
我嘗試使用背景畫筆QBrush(QColor(Qt::red))
創建一個新項,然后使用新項(使用QTableWidget::setHorizontalHeaderItem(int column, QTableWidgetItem *item)
設置表的標題。我還嘗試了繼承QTableWidgetItem
和使用以下方法覆蓋virtual 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);
}
}
我可以更改標題部分的前景。 但是,當我嘗試更改標題的背景畫筆時……什么也沒有發生……就像我為標題區域設置的QTableWidgetItem的背景畫筆被忽略了一樣。
相反,從頭開始定制headerData()創建模型創建的子類QTableWidgetItem與希望的實現QTableWidgetItem ::數據() ,並使用這個類的實例為QTableWidget的:: setHorizontalHeaderItem 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.