簡體   English   中英

我需要實現自己的QAbstractTableModel嗎?

[英]Do I need to implement my own QAbstractTableModel?

我發現了這個問題: 如何更改QTreeView標頭(又名QHeaderView)的背景色?

我希望能夠為每個標題部分設置顏色。 因此,上面看到的問題似乎是我的解決方案!

解決方案說:“ 最簡單的方法可能是從QAbstractItemModel或另一個模型類派生新模型並重新實現headerData()”。 我去看了QTableWidget,QTableModel,QTableWidgetItem的Qt源代碼樹 ……這些類被認為是“默認模型”,所以我認為它們將是一個很好的例子,然后我將實現自己的QAbstractTableModel。

我看到的3個文件是3300行代碼。 這絕對不是IMO的“最簡單方法”!

我想要QTableWidget的功能,但是我想添加以下功能:

  • horizo​​ntalHeader.setSectionColor(index,color)
  • verticalHeader.setSectionColor(index,color)

如果我只想更改節標題的顏色,是否真的需要繼承/實現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的:: setHorizo​​ntalHeaderItem

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM