问题标签 [qmodelindex]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
434 浏览

qt - 如何获取存储指向外部模型的指针的模型的 QModelIndex

我有来自 2 个不同浏览器的 2 个书签节点列表(每个包含名称和可能的 url)的模型。

书签列表:

这个模型还有一个比较方法,它计算出哪些书签只包含在一个书签列表中。结果,我在模型中有 2 个附加列表:

使用 Qt,我使用 2 个 QTreeview 来显示 bookmarkList_1 和 bookmarkList_2,其中 QModelIndex 在内部指向 Bookmark_Nodes。

现在,由于我有 bookmarkOnlyInList_1/bookmarkOnlyInList_1,我想通过给定的整数 var 滚动到 Bookmark_Node(例如,bookmarkOnlyInList_1 中的第三个唯一 Bookmark_Node。

为了在树视图中找到 QModelIndex,我尝试使用 QAbstractIem::match()。

但我迷路了:

如何将 startIndex(第一个参数)设置为树的顶级根?

如何将我的 Bookmark_Node 指针传递给 QVariant(第三个参数)?

或者更一般地说:如何获得一个 QModelIndex 以传递给 QTreeView::scrollTo,具有内部指针 Bookmark_Node 指针。

我可以通过 QModelIndices 丰富 bookmarkOnlyInList_1/2,但这会将模型与视图混合在一起,这是我想避免的。有什么建议么?

更多信息:

当程序启动时,它看起来像: 在此处输入图像描述

按下按钮后,它应该搜索“Mike”并展开该节点,如下图所示。问题是,它没有扩展。 在此处输入图像描述

如果我扩展所有内容,我会得到完整的模型: 在此处输入图像描述

这里是启动按钮后将运行的代码。QModelIndexList 行包含 Mike 的 QModelIndex,但 row 和 count 设置为零。也许这就是问题的原因。

0 投票
2 回答
849 浏览

python - QAbstractItemModel 和 QModelIndex 之间的相互作用

以下问题是关于QAbstractItemModelQModelIndex类的设计以及它们之间的相互作用,如下面的代码示例所示:

  1. 应该如何QModelIndex创建。根据我对文档的阅读,答案是QAbstractItemModel::createIndex()但它似乎不完整,因为此函数不提供有关 ModelIndex 与其父级的偏移量的任何信息。相反,这是由QAbstractItemModel::index()完成的。有没有办法让两个功能一起玩?
  2. 数据应该如何存储在模型索引中,模型索引和内部指针存储的数据、为模型索引或在(不确定术语)中存储的数据有什么区别?当没有 setData 函数时,模型索引从哪里获取它返回的数据?内部指针是数据吗?它永远是数据吗?
  3. ModelIndex和Model返回的数据有什么区别?即QModelIndex::data()QAbstractItemModel::data( QModelIndex , int )?为什么设置器QAbstractItemModel::setData( QModelIndex , ... )仅仅是虚拟的,而获取器QAbstractItemModel::data( QModelIndex , ... )是纯虚拟的。当然,API 应该能够返回它存储的数据。

我知道我的问题链接到 C++ API,而代码片段在 PySide 中。我这样做是因为这个问题跨越了两个 API。

0 投票
1 回答
181 浏览

python - 从 ModelIndex 扩展 QTreeView 项目

我如何扩展 QTreeView 项目,知道它是 modelIndex。我正在尝试调用以下代码,它不会引发任何错误,但不会扩展树视图项...

要进行测试,请选择列表中的第一项并单击“添加”按钮。当用户添加一个新类别时,我希望它扩展它被添加到的项目。

在此处输入图像描述

0 投票
0 回答
138 浏览

python - 如何在for循环python中索引字典

我有一个基本上相当于嵌套字典的数据结构。假设它看起来像这样:

此外,我有一个带有 for 循环的递归函数,可以从此字典中生成嵌套的树视图。现在我试图在 for 循环中为每个值、键对添加一个索引。我使用 QModelindex 进行了尝试,但我没有达到代码执行我想要它的地步。

有没有一种简单的方法来实现索引并将索引添加到值、键对?

我想要的结果是只更新 PyQt5 Gui 中更改的单个值,而不是整个 Gui。

如果有人想知道,这是我的整个项目。

非常感谢提前

0 投票
1 回答
58 浏览

qt5 - QModelIndex 创建的地点和时间

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

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

在文档中我们可以找到:

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

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

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

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

0 投票
1 回答
66 浏览

c++ - QAbstractItemModel - QModelIndex 对象在创建时是否应该被缓存?

当子类化 aQAbstractItemModel并重新实现该index()方法时,我每次都只是简单地返回一个新索引createIndex()。但我注意到,index()当模型与视图结合使用时,该方法会被调用数千次,用于各种绘制事件等等。

我是否应该QModelIndex在第一次生成对象后缓存该对象index(),然后在index()随后在同一行/列上调用时返回缓存的索引?文档中没有提到,似乎索引本身在某些情况下可能会失效,所以我不确定在这里做什么。

在我的特殊情况下,我正在使用 Pyside6,但我认为这可能适用于 Qt 框架的任何实现。

0 投票
1 回答
76 浏览

c++ - 如何创建无效的 QModelIndex?

我正在实现一个QModelIndex基于QString输入搜索 a 的功能。但是,如果我找不到这个索引,该函数应该返回一个无效的索引。我的模型是QStandardItemModel.

invisibleRootItem()->index()可以作为无效索引返回吗?在qt 文档中指出,它总是会创建一个无效的索引。

0 投票
1 回答
59 浏览

c++ - 在特殊情况下,如何防止来自 QFileSystemModel 的 rowsInserted 信号?

我正在编写文件资源管理器,并且使用 QFileSysteModel 作为基础。我注意到方法QFileSystemModel::index()QFileSystemModel::fetchMore导致模型发出信号rowsInserted

我已将rowsInserted信号连接到一个插槽,该插槽发送有关新插入行的数据。问题是来自QFileSystemModel::index()并且QFileSystemModel::fetchMore不是真正新的行,而是由 QFileSystemModel 本身添加到模型中的行,这在我的程序中造成了麻烦。

我在使用之前尝试过设置标志QFileSystemModel::index()QFileSystemModel::fetchMore但它并不可靠,尤其是QFileSystemModel::fetchMore.

喜欢:

我试图像这样重置标志:

0 投票
0 回答
34 浏览

c++ - 从外部数据源更新 QAbstractItemModel

我想多次使用 QAbstractItemModel 之前它将保存来自外部模型的树结构。此模型可以在删除行之前和完成删除行之后发送通知。这些通知可以随时发生(在同一个 GUI 线程内)。

QAbstractItemModel 有 beginRemoveRows 和 endRemoveRows 然后连接到模型信号。我不明白我是如何获得 QModelIndex 的。我的底层数据模型对每个设计的 QAbstractItemModel 一无所知,因为我想在 Qt 不可接受的其他地方使用它。

当我知道底层数据结构中元素的索引是什么并且可以访问父级时,获取 QModelIndex 的正确方法是什么?

0 投票
1 回答
88 浏览

c++ - 在c ++中打印QTableView中的所有可见行

我有 100 多行的 QTableView。但一次只能看到 6 行。要查看下一组行,我必须使用滚动条。

我想在 QTableView 中打印可见行。但不能那样做。我只能打印单个选定的行。

如何在 QTableView 中打印可见行?