我需要实现自己的QAbstractTableModel吗?

时间:2012-02-19 02:27:02

标签: c++ qt user-interface inheritance abstract-class

我发现了这个问题: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的功能但是我想添加以下功能:

  • horizo​​ntalHeader.setSectionColor(索引,颜色)
  • verticalHeader.setSectionColor(索引,颜色)

我真的需要继承/实现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背景画笔一样被忽略。

1 个答案:

答案 0 :(得分:1)

不是从头创建带有自定义headerData()的模型,而是使用QTableWidgetItem的所需实现创建QTableWidgetItem::data()的子类,并将此类的实例用于QTableWidget::setHorizontalHeaderItem