这里是 Qt 菜鸟!我试图创建一个迭代器来查找给定文件夹中的所有 .txt 文件,将其添加到 QStringList 并将其传递给 QListView。但是当我声明一个新的 QStringListModel 时,我收到了
The program has unexpectedly finished
当我在调试和 Release模式下运行时。相关代码如下:
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
最佳答案
好的伙计们,我设法找出问题所在。我的代码(尽管事实上它目前并不是最优化的)实际上很好。问题是我调用函数封装了这个片段,getFiles(),在 UI 设置之前(facepalm,我知道) :
getFiles();
ui->setupUi(this);
这导致指向 ui->listView 的指针崩溃了。现在代码是这样的:
ui->setupUi(this);
getFiles();
...
无论如何,非常感谢大家提出改进迭代器代码的建议!我相信我会回来的!
编辑:当 2 天计时器到时,我会将其标记为已回答。
关于c++ - Qt 5.5 程序崩溃与 QStringListModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34118797/