我发现这个问题: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