我正在尝试将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);
蟒蛇:
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)
最佳答案
如果您在CMD /控制台中运行代码,则会收到以下错误消息:
QSocketNotifier: Can only be used with threads started with QThread
Segmentation fault (core dumped)
这表明
QFileSystemModel
使用QThread(也在the docs中指示),并且要使QThread运行,它需要一个事件循环,在这种情况下,您必须创建QApplication
的实例: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)
上面的内容也在the docs中明确指出:
详细说明
此类提供对本地文件系统的访问,
重命名和删除文件和目录的功能,以及
创建新目录。在最简单的情况下,它可以与
合适的显示窗口小部件,作为浏览器或过滤器的一部分。
可以使用提供的标准接口访问QFileSystemModel
由QAbstractItemModel提供,但它也提供了一些便利功能
特定于目录模型的文件。 fileInfo(),isDir(),
fileName()和filePath()函数提供有关
与模型中的项目相关的基础文件和目录。
可以使用mkdir(),rmdir()创建和删除目录。
注意:QFileSystemModel需要QApplication的实例。
(强调我的)
对于C ++,QApplication可能是在main.cpp中创建的。
关于python - PySide2-调用QFileSystemModel.index()时程序崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59092650/