2015-12-06 11 views
0

Qt noob здесь! Я пытаюсь создать итератор, чтобы найти все .txt-файлы в данной папке, добавить его в QStringList и передать его в QListView. Но когда я объявляю новый QStringListModel, я получаюQt 5.5 Сбой программы с QStringListModel

Программа неожиданно закончил

, когда я бегу в Debug и 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

+0

Я бы использовал QFileInfo для расщепления путей. Помимо этого я не вижу краха, поэтому я спрашиваю, вы используете бинарные файлы Qt, которые были созданы для вашего компилятора? Вы не можете использовать двоичные файлы, созданные для другой версии визуальной студии. – drescherjm

+0

Насколько я знаю, у меня есть правильные двоичные файлы для VS2013. Спасибо за подсказку QFileInfo! – htmlboss

+0

Ещё одна возможная причина. Был ли ui-> listView действительным указателем? У вас есть настройка ui для вашей формы? – drescherjm

ответ

1

Ok люди, мне удалось выяснить проблему. Мой код (несмотря на то, что он на самом деле не самый оптимизированный на данный момент) был на самом деле прекрасен. Вопрос заключается в том, что я был вызов функции что инкапсулированный этот фрагмент, GetFiles(), перед тем интерфейс был настройки (FACEPALM, я знаю):

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

Это привело указатель на пользовательский интерфейс -> listView freaking out. Теперь код выглядит так:

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

В любом случае, спасибо куча для предложений у всех по улучшению кода итератора! Я уверен, что вернусь больше!

Редактировать: Я укажу это как ответ, когда будет установлен 2-дневный таймер.

Смежные вопросы