我发现了这个问题: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 行代码。在我看来,这绝对不是“最简单的方法”!!!
我想要 QTableWidget 的功能,但我想添加以下功能:
- horizontalHeader.setSectionColor(index,color)
- verticalHeader.setSectionColor(index,color)
如果我只想更改节标题的颜色,我真的需要继承/实现 QAbstractTableModel 吗?
更新:
我没有使用自己的自定义 View 和模型类。我正在使用 the convenience class QTableWidget现在(它被称为便利类 b/c,它实现了 View 和模型)。函数headerData()
是模型的一部分。 model class, QTableModel,不能通过 Qt lib/headers 访问,所以我不能继承它。
更新:
我尝试用背景画笔创建一个新项目QBrush(QColor(Qt::red))
,然后用新项目设置表格的标题(使用QTableWidget::setHorizontalHeaderItem(int列,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);
}
}
我可以更改标题部分的前景。但是当我尝试更改页眉的背景画笔时...没有任何反应...就像我为页眉部分设置的 QTableWidgetItem 的背景画笔被忽略了。
最佳答案
与其从头开始使用自定义 headerData() 创建模型,不如创建 QTableWidgetItem 的子类希望实现 QTableWidgetItem::data()并将此类的实例用于 QTableWidget::setHorizontalHeaderItem .
关于c++ - 我需要实现自己的 QAbstractTableModel 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9346116/