Qt 5.5程序崩溃与QStringListModel

时间:2015-12-06 14:59:29

标签: c++ qt qt5

Qt noob在这里!我试图创建一个迭代器来查找给定文件夹中的所有.txt文件,将其添加到QStringList并将其传递给QListView。但是当我声明一个新的QStringListModel时,我会收到

  

该程序意外完成

当我在调试和发布模式下运行时。以下是相关代码:

QDirIterator it(dir, QStringList() << "*.txt", QDir::Files | QDir::NoSymLinks, QDirIterator::Subdirectories);
    if (it.hasNext()) {
        while (it.hasNext()) {

            QStringList fileList;

            // Remove file extension and absolute path from string respectively
            QString filenameRaw = it.next();
            QString filename = filenameRaw.split(".", QString::SkipEmptyParts).at(0);

            // Outputs correctly
            qDebug() << filename;

            fileList << filename;

            // The next line is the problem.
            QStringListModel *model = new QStringListModel(ui->listView);
            model->setStringList(fileList);
            ui->listView->setModel(model);

        }
    }

可能是一个愚蠢的问题,但我仍然可以从中学到一些东西:P

1 个答案:

答案 0 :(得分:1)

好的伙计们,我设法找出问题所在。我的代码(尽管事实上它并不是真正最优化的)实际上很好。问题是我调用函数在 UI设置之前封装了这个片段,getFiles(), facepalm,我知道) :

getFiles();
ui->setupUi(this);

这导致指向ui-&gt; listView的指针吓坏了。现在代码是这样的:

ui->setupUi(this);
getFiles();
...

无论如何,感谢大家提出改进迭代器代码的建议!我相信我会更多回来!

编辑:当2天计时器启动时,我会将其标记为已回答。