我在QTreeView中有很多项。每个项都是使用此类生成的:
class Branch(QStandardItem):
def __init__(self, label, uri = None):
QStandardItem.__init__(self, label)
self.uri = uri
这是我真正的树:
class FileTree(QTreeView):
def __init__(self):
QTreeView.__init__(self)
def keyPressEvent(self, event):
if event.key() == Qt.Key_Space or event.key() == Qt.Key_Return:
crawler = self.selectedIndexes()[0].model().item(self.selectedIndexes()[0].row())
print(crawler.uri)
QTreeView.keyPressEvent(self, event)
如您所见,我有点不确定如何从所选项中获取uri变量。我发现selectedIndexes()
返回的是一个模型,而不是项本身。我不知道如何从一个到另一个。尝试使用self.selectedIndexes()[0].row()
获取项目号有点冒险,但它似乎忽略了树中的各个分支(例如,它将为分支中的第一行提供0
,但不会告诉我它在哪个分支中)。
从QTreeView获取所选项目的正确方法是什么?或者有没有更好的方法来检测空格键或返回键是否被击中,从而更容易做到这一点?Qt的Python文档非常缺乏,所以很难知道我是否以一种感性的方式做过事情。
您调用的是正确的函数,它实际上返回一个
QModelIndexList
,它只是QList<QModelIndex>
的typedef,而QModelIndex
是可以指向树的任何部分的数据结构。QModelIndex
不是模型-视图-控制器(MVC)意义上的模型,而是QAbstractItemModel
中对象的地址,该地址是所有Qt的ItemView对象(包括树)下的数据结构。实际上,您非常接近,QAbstractModelIndex
由一行、一列和一个父级组成,这使它可以寻址层次数据结构中的任何位置。如果你用这条线你应该找到你要找的东西。
至于文档,即使没有特定于python的文档,也有助于阅读正式的Qt文档,但是类的层次结构和功能仍然是相同的。在文档中很少有C++特定的信息。
您调用的是正确的函数,它实际上返回一个
QModelIndexList
,它只是QList<QModelIndex>
的typedef,而QModelIndex
是可以指向树的任何部分的数据结构。QModelIndex
不是模型-视图-控制器(MVC)意义上的模型,而是QAbstractItemModel
中对象的地址,该地址是所有Qt的ItemView对象(包括树)下的数据结构。实际上,您非常接近,QAbstractModelIndex
由一行、一列和一个父级组成,这使它可以寻址层次数据结构中的任何位置。如果你用这条线你应该找到你要找的东西。
至于文档,即使没有特定于python的文档,它也有助于阅读正式的Qt文档,但是类的层次结构和功能仍然是相同的。在文档中很少有C++特定的信息。
Harald的答案对我不起作用,因为我正在使用一个qsqquerymodel作为模型(我得到了错误
{AttributeError}'QSqlQueryModel' object has no attribute 'itemFromIndex'
)。不过,为了获得所选行的第0列数据,下面的技巧帮了我一把:
Harald的答案对我不起作用,因为我正在使用一个QSqlQueryModel作为模型(我得到了错误
{AttributeError}'QSqlQueryModel' object has no attribute 'itemFromIndex'
)。不过,为了获得所选行的第0列数据,下面的技巧帮了我一把:
相关问题 更多 >
编程相关推荐