2012-02-19 62 views
0

我发现这个问题: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的的功能,但后来我想添加下列能力:

  • horizo​​ntalHeader.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我为标题部分设置的背景画笔被忽略。

+0

为什么你不能只重写视图使用的模型的headerData方法?您的确切设置是什么,即您使用的是哪个小部件和哪些模型类? – chalup 2012-02-19 10:28:43

+0

@chalup我为你更新了问题。 – 2012-02-19 17:36:04

+0

也许提供自定义QHeaderView会做的伎俩...我会试试看。 – 2012-02-21 16:25:32

回答

相关问题