编辑2:model.hasChildren(parentIndex)返回True,但model.rowCount(parentIndex)返回0。 QFileSystemModel只是PyQt中的关键吗?

编辑:经过一点调整,如果我使用QDirModel,所有这些都完全可以正常工作。这已被弃用,但也许QFileSystemModel尚未在PyQt中完全实现?



目前,我正在学习Qt Model / View体系结构,并且发现了一些无法正常工作的东西。我有以下代码(改编自Qt Model Classes):

from PyQt4 import QtCore, QtGui

model = QtGui.QFileSystemModel()

parentIndex = model.index(QtCore.QDir.currentPath())
print model.isDir(parentIndex) #prints True
print model.data(parentIndex).toString() #prints name of current directory

rows = model.rowCount(parentIndex)
print rows #prints 0 (even though the current directory has directory and file children)


问题:

PyQt是否有问题,我做错了什么,还是完全误解了QFileSystemModel?根据文档,model.rowCount(parentIndex)应该返回当前目录中的子代数。 (我正在Ubuntu上使用Python 2.6运行它)

QFileSystemModel文档说它需要一个Gui应用程序的实例,因此我也将上述代码放在QWidget中,如下所示,但结果相同:

import sys
from PyQt4 import QtCore, QtGui

class Widget(QtGui.QWidget):
    def __init__(self, parent=None):
        QtGui.QWidget.__init__(self, parent)

        model = QtGui.QFileSystemModel()

        parentIndex = model.index(QtCore.QDir.currentPath())
        print model.isDir(parentIndex)
        print model.data(parentIndex).toString()

        rows = model.rowCount(parentIndex)
        print rows


def main():
    app = QtGui.QApplication(sys.argv)
    widget = Widget()
    widget.show()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

最佳答案

我已经解决了

使用QFileSystemModel而不是QDirModel的原因是因为QFileSystemModel在单独的线程中从文件系统加载数据。这样做的问题是,如果您尝试在构造子代之后立即打印子代的数量,那就是它尚未加载子代。解决上述代码的方法是添加以下内容:

self.timer = QtCore.QTimer(self)
self.timer.singleShot(1, self.printRowCount)


到构造函数的末尾,并添加一个printRowCount方法,该方法将打印正确数量的子代。 ew

关于python - 我的QFileSystemModel在PyQt中无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2658467/

10-11 18:47