如何自动将 QTreeView 的索引设置为树中的第一项

How to set index of QTreeView as first item in tree automatically

我有一个程序,当单击 QTreeView 中的一个项目时,它会显示有关该项目的详细信息,并且单击一个按钮就可以打开该文件,但是如果没有选择文件,该程序将关闭。我试过 setCurrentIndex() 但是我不确定我是否在我能找到的唯一示例中正确使用它是 PyQt4 或 C++。

我正在运行 PyQt5 windows 7.

    self.treeView = QtWidgets.QTreeView(self.centralWidget)
    self.treeView.setSortingEnabled(True)
    self.treeView.setObjectName("treeView")
    self.horizontalLayout_4.addWidget(self.treeView)
    self.file_model=QtWidgets.QFileSystemModel()
    self.file_model.setRootPath('C:\My Stuff\Movies')
    self.treeView.setModel(self.file_model)
    self.treeView.setRootIndex(self.file_model.index('C:\My Stuff\Movies'))
    self.treeView.setHeaderHidden(True)
    self.treeView.hideColumn(1)
    self.treeView.hideColumn(2)
    self.treeView.hideColumn(3)
    self.treeView.setCurrentIndex(self.file_model.index(0,0))

或者,我更希望出现 QMessagebox 表示未选择文件,我制作了消息框并且它正在工作但是当树中没有选择文件时我无法显示它在显示错误消息之前查看程序崩溃。

self.file_model.index(0,0) 只是给你根目录的信息,在你的例子中,C:。您需要做的是等待发出 directoryLoaded( QString ) 信号,然后选择 (0, 0)

处的索引

这是代码的简化版本。也许您可以对代码进行必要的更改。

import os, sys

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

if __name__ == '__main__' :

    app = QApplication( sys.argv )

    treeView = QTreeView()
    treeView.setSortingEnabled( True )
    treeView.setObjectName("treeView")

    fsm = QFileSystemModel()
    fsm.setRootPath( 'C:\My Stuff\Movies' )

    def selectZeroZero( path ) :
        if fsm.rowCount( fsm.index( path ) ) :
            treeView.setCurrentIndex( fsm.index( 0, 0, fsm.index( path ) ) )

    fsm.directoryLoaded.connect( selectZeroZero )

    treeView.setModel( fsm )
    treeView.setRootIndex( fsm.index( 'C:\My Stuff\Movies' ) )

    treeView.setHeaderHidden( True )
    treeView.hideColumn( 1 )
    treeView.hideColumn( 2 )
    treeView.hideColumn( 3 )

    treeView.show()

    sys.exit( app.exec_() )