我需要用Qt实现一个表。

我相信我将使用此模型使用带有QTableView的QAbstractTableModel。

我知道我必须编辑模型的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)


从视图中通常是QTableView实例调用这些方法。前两个方法应返回表的尺寸。例如,如果rowCount()返回10,并且columnCount()返回4,则视图将调用data()方法40次(每个单元一次),以请求模型内部数据结构中的实际数据。

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

Qt Documentation具有您需要了解的所有信息。

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

10-09 06:48
查看更多