0

QAbstractItemModel有一个 QAbstractItemModel::createIndex()创建 QModelIndex 的方法。

例如,当为每个 QComboBox 项目创建此对象时?

在文档中我们可以找到:

注意:模型索引应立即使用,然后丢弃。在调用更改模型结构或删除项目的模型函数后,您不应依赖索引保持有效。如果您需要随着时间的推移保留模型索引,请使用 QPersistentModelIndex。

所以它似乎是临时对象,但是谁创建的呢?是模型,但我没有发现模型本身在源代码中创建索引的任何迹象,或者视图(小部件)在从模型读取数据之前创建索引?

QComboBox 如何存储从 Model 读取的值和索引,或者它在每次需要更新数据时读取它?

QComboBox 如何实际读取数据,它只是从 0 循环到rowCount()并为每个值创建新索引然后用于data( const QModelIndex &index, int role )读取?

4

1 回答 1

0

好的,在我用模型编写自己的小部件后,我得到了一个答案——由小部件本身创建的 QModelIndex。

例如,您可以在 github 上使用我的项目:

https://github.com/vasiliyaltunin/articles.blog.altuninvv.ru/tree/master/qt5/Models/LampModel

灯泡状态更新时

https://github.com/vasiliyaltunin/articles.blog.altuninvv.ru/blob/1068fdd88466b0e2dcf818af1e305e7d41896b19/qt5/Models/LampModel/qlampwidget.cpp#L344

我使用模型方法 data() 从模型中获取状态

this->setStatus(model->data(QModelIndex(),Qt::DisplayRole).toInt());

因为我在模型中只有一个“单元格”,所以我将空 QModelIndex() 传递给模型。

因此,它小部件本身会根据模型返回的行数和列数创建索引。

于 2021-01-21T23:50:54.580 回答