EDIT2: model.hasChildren(parentIndex)
返回True
,但model.rowCount(parentIndex)
返回0
。QFileSystemModel 在 PyQt 中只是 fubar 吗?
编辑:如果我使用 QDirModel,只要稍加调整,这一切都可以正常工作。这已被弃用,但也许 QFileSystemModel 尚未在 PyQt 中完全实现?
我目前正在学习 Qt 模型/视图架构,但我发现有些东西不能像我预期的那样工作。我有以下代码(改编自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()