我发现了这个问题:How to change the background color for a QTreeView Header (aka QHeaderView)?
我希望能够为每个标题部分设置颜色。所以上面提到的问题似乎是我的解决方案!
解决方案说“最简单的方法这样做可能是从QAbstractItemModel或其他模型类派生出一个新模型并重新实现headerData()”。我去了looked at the Qt source tree for QTableWidget, QTableModel, QTableWidgetItem ......这些类被认为是“默认模型”所以我认为它们是一个很好的例子然后我会实现我自己的QAbstractTableModel。
我看到的3个文件是高达3300行的代码。这绝对不是“最简单的方式”IMO !!!
我想要QTableWidget的功能但是我想添加以下功能:
我真的需要继承/实现QAbstractTableModel,如果我想要的是改变节头的颜色吗?
更新
我没有使用自己的自定义视图和模型类。我现在正在使用the convenience class QTableWidget(它被称为便利类b / c,它实现了视图和模型)。函数headerData()
是模型的一部分。无法通过Qt lib / headers访问model class, QTableModel,,因此我无法继承它。
更新
我尝试使用背景画笔QBrush(QColor(Qt::red))
创建新项目,然后使用新项目设置表格标题(使用QTableWidget::setHorizontalHeaderItem(int column, QTableWidgetItem *item)
。我还尝试继承QTableWidgetItem
并覆盖虚拟data()
1}}方法:
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背景画笔一样被忽略。
答案 0 :(得分:1)
不是从头创建带有自定义headerData()的模型,而是使用QTableWidgetItem的所需实现创建QTableWidgetItem::data()的子类,并将此类的实例用于QTableWidget::setHorizontalHeaderItem。