QModelIndex 创建的时间和地点
Where and when QModelIndex created
Class QAbstractItemModel
有一个创建 QModelIndex 的方法 QAbstractItemModel::createIndex()
。
例如,何时为每个 QComboBox 项目创建此对象?
在文档中我们可以找到:
注意:模型索引应立即使用,然后丢弃。在调用更改模型结构或删除项目的模型函数后,您不应依赖索引保持有效。如果您需要随时间保留模型索引,请使用 QPersistentModelIndex。
看起来是临时对象,但是谁创建的?它是模型,但我没有发现任何迹象表明模型本身在源代码中创建索引,或者视图(Widget)在从模型读取数据之前创建索引?
QComboBox 如何存储从 Model 中读取的值和索引,或者它在每次需要更新数据时从中读取?
QComboBox实际上是如何读取数据的,它只是从0循环到rowCount()
并为每个值创建新索引然后使用data( const QModelIndex &index, int role )
读取吗?
好的,在我用模型编写了自己的小部件之后,我有了一个答案——由小部件本身创建的 QModelIndex。
例如,您可以在 github:
上使用我的项目
https://github.com/vasiliyaltunin/articles.blog.altuninvv.ru/tree/master/qt5/Models/LampModel
lamp 状态更新时
我使用模型方法 data() 从模型中获取状态
this->setStatus(model->data(QModelIndex(),Qt::DisplayRole).toInt());
因为我在模型中只有一个“单元格”,所以我将空的 QModelIndex() 传递给模型。
所以它的小部件本身根据模型返回的行数和列数创建索引。
Class QAbstractItemModel
有一个创建 QModelIndex 的方法 QAbstractItemModel::createIndex()
。
例如,何时为每个 QComboBox 项目创建此对象?
在文档中我们可以找到:
注意:模型索引应立即使用,然后丢弃。在调用更改模型结构或删除项目的模型函数后,您不应依赖索引保持有效。如果您需要随时间保留模型索引,请使用 QPersistentModelIndex。
看起来是临时对象,但是谁创建的?它是模型,但我没有发现任何迹象表明模型本身在源代码中创建索引,或者视图(Widget)在从模型读取数据之前创建索引?
QComboBox 如何存储从 Model 中读取的值和索引,或者它在每次需要更新数据时从中读取?
QComboBox实际上是如何读取数据的,它只是从0循环到rowCount()
并为每个值创建新索引然后使用data( const QModelIndex &index, int role )
读取吗?
好的,在我用模型编写了自己的小部件之后,我有了一个答案——由小部件本身创建的 QModelIndex。
例如,您可以在 github:
上使用我的项目https://github.com/vasiliyaltunin/articles.blog.altuninvv.ru/tree/master/qt5/Models/LampModel
lamp 状态更新时
我使用模型方法 data() 从模型中获取状态
this->setStatus(model->data(QModelIndex(),Qt::DisplayRole).toInt());
因为我在模型中只有一个“单元格”,所以我将空的 QModelIndex() 传递给模型。
所以它的小部件本身根据模型返回的行数和列数创建索引。