【问题标题】:What are differences between index and item method of QStandardItemModel?QStandardItemModel 的 index 和 item 方法有什么区别?
【发布时间】:2017-04-11 02:03:11
【问题描述】:

朋友们,能不能给我解释一下这些方法的概念?通常,当我获取数据时,我会使用“索引”来引用模型中的项目并通过数据属性指定角色。我今天遇到了 'item' 方法,对该方法的解释是“如果已设置,则返回给定行和列的项目;否则返回 0。”与“索引”+“数据”方法有什么区别?它只是一个捷径吗?

这是 'item' 方法的文档。 https://doc.qt.io/qt-5/qstandarditemmodel.html#item

或者,这是“索引”方法的文档。 https://doc.qt.io/qt-5/qstandarditemmodel.html#index

【问题讨论】:

  • Qt 将模型视为分层的一维或二维数组,分层是因为每个包含项的“数组”都可以有一个父项。 QModelIndex 对象只是将父、行和列信息封装到一个可以引用和传递的对象中,但是那些“坐标”仍然在那里,QModelIndex 对象仍然有父、行和列。实际上,快捷方式是 QModelIndex 对象。

标签: qt pyqt pyqt4 pyqt5


【解决方案1】:

我会尽力解释的。

该项目就像您在视图中看到的实际小部件(它实际上不是小部件,但我认为这是考虑它的好方法)。这是用户实际看到的。

索引更多的是“幕后”。它就像一个指向模型中某个位置的指针。

一个项目可以在没有索引的情况下存在。但是没有项目就不能存在有效的索引。该项目仅在放入模型时与索引相关联。否则,它只是一件没人能看的东西。

以数组为例……它包含多个“项”。您可以通过提供一个数字(即索引)来指定您想要的数组中的哪个项目。简单地说,索引只有在与数组中的某个项目关联时才存在。但是该项目可以存在于数组之外并且是它自己的东西而没有索引。

创建 QModelIndex 是为了作为一种轻量级的方式来引用模型中的项目。类似于您可以使用数字来表示存储在数组中的对象的方式。

【讨论】:

  • 您对选择一个而不是另一个有什么建议吗?根据我对您的回答的理解,如果我只想获取项目的值而不是编辑它们,因为它们不提供索引,“项目”方法可以完成工作。我不确定我是否理解正确。
  • @PaKaNoSuKiKeNuiChaZaP 您可以编辑项目。 QStandardItem也可以provide you an index。请参阅docs for QStandardItem
  • 不,你真的不能选择其中之一。他们携手合作。不,您只能通过“项目”编辑数据。因为那是保存数据的地方。您可以将数据存储在项目中,并且不需要索引。它只有在放入模型时才会获得索引。索引只能读取数据。老实说,刚开始使用它们。当您继续时,这将是有意义的。长话短说,您不会“挑选”一个与之合作。你一直都在使用。
  • @mrg95 从技术上讲,您还可以使用带有QStandardItemModel::setData 的索引来编辑数据。不过在内部这使用QStandardItemModel::itemFromIndex
  • 但是你看,索引只是返回项目。它就像一个指向项目的指针。您不能单独使用索引来设置数据。那只会让他感到困惑
猜你喜欢
  • 2020-03-06
  • 1970-01-01
  • 1970-01-01
  • 2013-06-11
  • 2015-05-11
  • 2015-04-08
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多