Нужно сделать обработку drop каталога с музыйкой с большим количеством подкаталогов. Делаю так.
void MainWindow::dropEvent(QDropEvent *pe){
QList<QUrl> urlList=pe->mimeData()->urls();
emit sendDroppedData(urlList);
pe->acceptProposedAction();
}
void MainWindow::AddDroppedData(const QList<QUrl> &urlList){
QStringList str;
QString trystr;
foreach (QUrl url, urlList ){
trystr=url.toLocalFile();
if (QFileInfo(trystr).isDir()){ //якщо доданий запис - папка скануємо її вміст а записи
QDir dir(trystr);
if (dir.exists()){
foreach (QString f,dir.entryList(QDir::Files)){
QString ext=dir.filePath(f).right(3).toUpper();
if (extensions.contains(ext))
str<<dir.filePath(f);}
emit sendDroppedFiles(str);//відправляємо на додавання те що є і скануємо далі папки
str.clear();//очистити список з підкаталогу
//рекурсивний if (сканування з суб-каталогів)
QList<QUrl> newDirs;
foreach(QString f, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) newDirs.append(QUrl::fromLocalFile(dir.filePath(f)));
if (newDirs.size()!=0) sendDroppedData(newDirs);}}
else {
QString ext=trystr.right(3).toUpper();
if (extensions.contains(ext))
str<<trystr;
}
}
emit sendDroppedFiles(str);//відправляємо ті записи, що є файлами на додавання до списку
}
Сигнал sendDroppesFiles отправляет список с файлами уже на добавление. Работает drop сразу файлов, и drop каталога, в ктором размещены файлы. Второй уровень подкаталогов уже не работает. Тоисть рекурсивный вызов
QList<QUrl> newDirs;
foreach(QString f, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) newDirs.append(QUrl::fromLocalFile(dir.filePath(f)));
if (newDirs.size()!=0) sendDroppedData(newDirs);}}
(sendDroppedData вызывает слот addDroppedData) дает
ASSERT failure in QList<T>::operator[]: "index out of range", file c:\Qt\Desktop\Qt\4.7.2\mingw\include/QtCore/qlist.h, line 464
Invalid parameter passed to C runtime function.Мб кто знает в чем ошибка