PySide2-调用QFileSystemModel.index()时程序崩溃

时间:2019-11-28 16:02:33

标签: python indexing pyside2 qfilesystemmodel

我正在尝试将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)

1 个答案:

答案 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中创建的。