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

标签 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 行代码。在我看来,这绝对不是“最简单的方法”!!!

我想要 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/

相关文章:

ios - 创建具有倾斜边缘的容器

python - Streamlit 浏览器应用程序无法从 Sagemaker 终端打开

java - 线程启动后服务器/客户端程序停止工作

c++ - 如何确定 catch (...) block 中的当前异常?

c++ - 将 QString 转换为十六进制?

c++ - 如何从 QPushButton 恢复项目?

c++ - QT C++ - 如何在播放列表处于事件状态时打开 Windows Media Player?

c++ - 为什么我应该使用简单的数组而不是容器类?

c++ - 为什么 T const&& 不是转发引用?

c++ - while(getline(myReadFile, temp, ':' )) 执行一次迭代太多导致 vector 越界