gpt4 book ai didi

c++ - 我需要实现自己的 QAbstractTableModel 吗?

转载 作者:行者123 更新时间:2023-11-28 08:10:10 26 4
gpt4 key购买 nike

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

  • horizo​​ntalHeader.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::setHorizo​​ntalHeaderItem(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com