我需要用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/