我正在尝试将https://doc.qt.io/qt-5/model-view-programming.html#using-model-indexes中的以下C ++示例转换为Python:
C ++:
QFileSystemModel *model = new QFileSystemModel;
QModelIndex parentIndex = model->index(QDir::currentPath());
int numRows = model->rowCount(parentIndex);
Python:
import os
from PySide2.QtWidgets import *
model = QFileSystemModel()
parent_index = model.index(os.getcwd())
nb_row = model.rowCount(parent_index)
print(nb_row)
但是我的程序崩溃,退出代码:
Process finished with exit code -1073741819 (0xC0000005)
答案 0 :(得分:1)
如果在CMD /控制台中运行代码,则会收到以下错误消息:
QSocketNotifier: Can only be used with threads started with QThread
Segmentation fault (core dumped)
哪个指示QFileSystemModel
使用了QThread(也在the docs中指出),并且要使QThread运行,它需要一个事件循环,在这种情况下,您必须创建{{ 3}}:
import os
import sys
from PySide2.QtWidgets import QApplication, QFileSystemModel
if __name__ == "__main__":
app = QApplication(sys.argv)
model = QFileSystemModel()
parent_index = model.index(os.getcwd())
nb_row = model.rowCount(parent_index)
print(nb_row)
QApplication
中也明确指出了上述内容:
详细说明
此类提供对本地文件系统的访问,从而提供 重命名和删除文件和目录的功能,以及 创建新目录。在最简单的情况下,它可以与 合适的显示窗口小部件作为浏览器或过滤器的一部分。
可以使用提供的标准接口访问QFileSystemModel 由QAbstractItemModel提供,但它也提供了一些便利功能 特定于目录模型的文件。 fileInfo(),isDir(), fileName()和filePath()函数提供有关 与模型中的项目相关的基础文件和目录。 可以使用mkdir(),rmdir()创建和删除目录。
注意:QFileSystemModel需要QApplication的实例。
(重点是我的)
对于C ++,QApplication可能是在main.cpp中创建的。