首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何同步QtreeView和TreeModel

如何同步QtreeView和TreeModel
EN

Stack Overflow用户
提问于 2017-09-29 19:36:04
回答 1查看 173关注 0票数 0

我使用的是pyqt5和Python3.6。我对QModel/TreeView中的索引函数感到困惑,并要求在这里清除我的大脑结。有些帖子更让我困惑,因为它们非常特别。我的问题或多或少是一个基本的问题。

我有一个包含数据的模型(基于Uludag's great tutorials),并将其设置到我的树中:

代码语言:javascript
复制
treeView = QTreeView()
treeView.show()
treeView.setModel(model)
#additional code
treeView.clicked.connect(treeViewStructure_clicked)

现在,我必须根据所选项目在程序中准备进一步的操作。我可以通过以下方式获得物品:

代码语言:javascript
复制
def treeViewStructure_clicked(self):
    #get the row of the click and print
    index = treeView.currentIndex()
    print(index.row())
    print('selected item index at %s with data: %s' % (index.row(), index.data()))

到目前一切尚好。但是索引是从treeView生成的(模型不起作用)。当然,如何写回它们将被同步?

EN

回答 1

Stack Overflow用户

发布于 2017-09-30 02:37:04

我很想留下评论,但我没有足够的声誉。

由于您的模型实现没有包含可以返回所选索引的方法,因此我必须从pyqt5获取它。因为treeView是一个QTreeView,所以你可以:treeView.selectionModel().selectedIndexes()

该信息来自here。它们将返回一个QModelIndex列表,它在这里有一个api。(请注意,虽然这个网站上有代码示例,但它是用C++编写的,但它仍然是可读的)

在api中,您可以从QModelIndex对象获取行和列以及父对象。

通常,我只需通过treeView.selectionModel().selectedIndexes()返回的对象修改数据。

例如:

代码语言:javascript
复制
arr = treeView.selectionModel().selectedIndexes()
index = arr[0]

然后只需修改索引即可。

但是,如果出于某种原因,您必须使用自己的模型,那么您可以做一件事。因为它扩展了QAbstractItemModel,所以可以使用索引函数。例如:

代码语言:javascript
复制
arr = treeView.selectionModel().selectedIndexes()
indexTemp = arr[0]
index = model.index(indexTemp.row(), indexTemp.column(), indexTemp.parent())

然后通过setData函数修改该值

但是如你所见,这是一个额外的步骤来获得相同的对象

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46487980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档