EDIT2: model.hasChildren(parentIndex)
возвращает True
, но model.rowCount(parentIndex)
возвращает 0
.QFileSystemModel - просто fubar в PyQt?
EDIT: С некоторой адаптацией все это работает точно так же, как и должно, если я использую QDirModel.Это устарело, но, может быть, QFileSystemModel не была полностью реализована в PyQt?
В данный момент я изучаю архитектуру Qt Model / View и обнаружил, что что-то не работаеткак я и ожидал.У меня есть следующий код (адаптированный из Классы моделей Qt ):
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 говорится, что для этого требуется экземпляр приложения с графическим интерфейсом, поэтому я также поместил приведенный выше код в 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()