gpt4 book ai didi

qt - 如何在 QAbstractTableModel 中设置数据

转载 作者:行者123 更新时间:2023-12-03 23:28:40 24 4
gpt4 key购买 nike

我需要用 Qt 实现一个表。

我相信我会起诉一个 QAbstractTableModel,一个 QTableView 使用这个模型。

我知道我必须编辑模型的 rowCount()、columnCount() 和 data() 函数。

但是,我不明白如何在模型中准确设置数据,以便 data() 函数可以检索它..

是否为此提供了 setData() 函数?我已经看到它以 EditRole 作为参数,这是我不想要的,因为我不希望我的表可编辑。

那么,如何使用 data() 函数在模型中“设置”数据,或者让模型获取数据?

此外,data() 函数是如何调用的,即谁调用它以及需要在哪里调用它?

请帮我解决一下这个。

谢谢。

最佳答案

实际数据如何保存在内存中,如何从数据存储中生成或查询完全取决于您。如果是静态数据,可以使用 Qt container classes或自定义数据结构。

您只需要重新实现 setData()可编辑模型的方法。

您需要在不可编辑的 QAbstractTableModel 中实现 4 种方法子类:

  • int rowCount()
  • int columnCount()
  • QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole )
  • QVariant data(const QModelIndex & index, int role = Qt::DisplayRole)

  • 这些方法是从 View 中调用的,通常是 QTableView实例。前两个方法应该返回表的维度。例如,如果 rowCount()返回 10columnCount()返回 4 , View 将调用 data()方法 40 次(每个单元格一次)询问模型内部数据结构中的实际数据。

    例如,假设您已经实现了一个自定义槽 retrieveDataFromMarsCuriosity()在你的模型中。该插槽填充数据结构并连接到 QPushButton例如,您可以通过单击按钮获取新数据。
    现在,您需要让 View 知道数据何时发生更改,以便它可以正确更新。这就是为什么你需要发出 beginRemoveRows() , endRemoveRows() , beginInsertRows() , endInsertRows()及其列对应物。

    Qt Documentation有你需要知道的一切。

    关于qt - 如何在 QAbstractTableModel 中设置数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14189693/

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