如何使Qtreeview复选框预先选择



我有一个带有qtgui.qfilesystemmodel到渲染文件系统文件夹的树视图。

我的树视图有一个复选框和检查&取消选中工作正常。我想预选UI负载上的所有复选框。

请建议如何为TreeView制作默认选定的复选框。

我的模型代码是: -

class CheckableDirModel(QtGui.QFileSystemModel):
    def __init__(self, resultFormats, parent=None):
        QtGui.QFileSystemModel.__init__(self, None)
        filters = QStringList()
        #import ipdb;ipdb.set_trace()
        filters.append('*.odb')
        resultFormats = resultFormats.split(',')
        for resultFormat in resultFormats:
            filters.append('*.' + resultFormat)
        self.setNameFilters(filters)
        #set to False to hide files that match the filter
        self.setNameFilterDisables(True)
        self.checks = {}
        self.selectedFiles = set()
        #self.b1 = QCheckBox("SPM_CAE_DATA")
        #self.b1.setChecked(True)

    #Show the particular formate ('.pages') file into result set for the checked folder
    def addFile(self,path1):
        # import ipdb;ipd b.set_trace()
        files = glob.iglob(os.path.join(str(path1), "*.pages"))#size= os.path.getsize(fp)
        for file in files:
            print(file)
            if os.path.isfile(file):
                #print(file)
                Formate.append(file)
                shutil.copy2(file, reportpath + '/../Particular_Formate')

        #print(Formate)
        #treeView1 = TreeView(reportpath)
    #Show the file greater than 250 MB into list 

    def addFilegt250mb(self,path1):
        # import ipdb;ipd b.set_trace()
        global listview1
        for root, dirs, files in os.walk(str(path1), topdown=False):
            for name in files:
                f = os.path.join(root, name)
                if os.path.isfile(f):#if os.path.isfile(f)
                    if os.path.getsize(f) >= 0:
                        greaterSize.append(f)
                        print(name)
                        shutil.copy2(f, reportpath+ '/../Particular_Formate_size')

        #print(greaterSize)

    #remove the File, When uncheck the Folder
    def deleteFile(self,path2):
        for root, dirs, files in os.walk(str(path2), topdown=False):
            for name in files:
                f = os.path.join(root, name)
                if name == ".DS_Store" :
                    pass
                else:
                    if os.path.getsize(f) >=0 :
                        greaterSize.remove(f)
                for x in Formate:
                    if x == f :
                        Formate.remove(x)

                    #Formate.remove(f)

                self.deletSize(name)
                self.deletFormate(name)
        #print(greaterSize)
        #print(Formate)        
    #remove the file size greater then 250 MB , When Folder is uncheck
    def deletSize(self,name)  :
        folder = reportpath +'/../Particular_Formate_size'
        for the_file in os.listdir(folder):
            file_path = os.path.join(folder, the_file)
            if the_file == name :
                try:
                    if os.path.isfile(file_path):
                        os.unlink(file_path)
                    #elif os.path.isdir(file_path): shutil.rmtree(file_path)
                except Exception as e:
                    print(e)
        #print(greaterSize)
    #Renove the particular formate file
    def deletFormate(self,name)  :
        folder = reportpath + '/../Particular_Formate'
        for the_file in os.listdir(folder):
            file_path = os.path.join(folder, the_file)
            if the_file == name :
                try:
                    if os.path.isfile(file_path):
                        os.unlink(file_path)
                        #import ipdb;ipdb.set_trace()
                    #elif os.path.isdir(file_path): shutil.rmtree(file_path)
                except Exception as e:
                    print(e)

    def data(self, index, role=QtCore.Qt.DisplayRole):
        if role != QtCore.Qt.CheckStateRole:
            return QtGui.QFileSystemModel.data(self, index, role)
        else:
            if index.column() == 0:
                return self.checkState(index)

    def flags(self, index):
        if (index.column() == 0):
            return QtGui.QFileSystemModel.flags(self, index) | QtCore.Qt.ItemIsUserCheckable
        else:
            return QtGui.QFileSystemModel.flags(self, index)

    def checkState(self, index):
        if index in self.checks:
            return self.checks[index]
        else:
            return QtCore.Qt.Unchecked
    def setData(self, index, value, role):
        if (role == QtCore.Qt.CheckStateRole and index.column() == 0):
           # print(QtGui.QFileSystemModel.filePath(self, index))
            self.checks[index] = value
            if QtGui.QFileSystemModel.filePath(self, index) in self.selectedFiles:
                self.selectedFiles.remove(QtGui.QFileSystemModel.filePath(self, index))
                path2=QtGui.QFileSystemModel.filePath(self, index)
                self.deleteFile(path2)

            else:
                path1 =QtGui.QFileSystemModel.filePath(self, index)
                self.addFile(path1)
                self.addFilegt250mb(path1)
                self.selectedFiles.add(QtGui.QFileSystemModel.filePath(self, index))
            self.emit(QtCore.SIGNAL("dataChanged(QModelIndex,QModelIndex)"), index, index)
            return True 
        return QtGui.QFileSystemModel.setData(self, index, value, role)

源代码

我尝试使用不同的组合进行复选框预选,但无法成功。

有一种方法setCheckState接受bool

self.b1 = QCheckBox("SPM_CAE_DATA")
self.b1.setCheckState(True)

最新更新