Qt перебор содержимого папок

297
27 декабря 2017, 21:03

Есть папка, в папке некоторое кол-во папок, в которых находятся изображения. задача заключается в том чтобы, указав начальную папку, получить в остальных, содержащихся в ней папка, собранные изображения из тех, что имеются. вопрос сборки не интересует, интересует именно перебор папок и их содержания. пробовал итераторы, но не вышло.

попробовал использовать совет - не вышло;

более подробно: поочередно из папок извлекать изображения и собирать их, но не могу понять как осуществить перебор папок. пример: есть папка "panoram",окей, перехожу в нее, ничего сложного. в ней папки "Z=-n",...., "Z=n" и уже в них нужные мне файлы. вот и возникает вопрос как перебрать все папки и их содержимое.

QString path = "/Users/kirill/Desktop/panoram/";
QDir dirCat(path);
dirCat.setFilter(QDir::Dirs);
QFileInfoList list = dirCat.entryInfoList();
for (int i = 0; i < list.size(); ++i) {
    QFileInfo fileInfo = list.at(i);
    QString catName = fileInfo.fileName();
    QString catBase = fileInfo.baseName();
    QString pathCat = fileInfo.path();
    QDir dirPix(pathCat);
    dirPix.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
    dirPix.setSorting(QDir::Name);
    QFileInfoList dirdir = dirPix.entryInfoList();
    for (QFileInfoList::iterator it = dirdir.begin(); it != dirdir.end(); ++it)
    {
        int hgf = 0;
        QString ststst = QString::number(hgf);
        QFileInfo fileInfo(*it);
        QString name = fileInfo.fileName();
        QString base = fileInfo.baseName();
        QStringList lst = base.split(QRegExp("[A-Za-z]="),QString::SkipEmptyParts);
        QStringList::iterator itr = lst.begin();
            QString pos,fileName;
            qreal xPos, yPos;
            pos = *itr;
            xPos = pos.toInt();
            ++itr;
            pos = *itr;
            yPos = pos.toInt();
            savePix = "/Users/kirill/Desktop/panoram/Z=" + catBase + "/build"+ ststst +".jpg";
            fileName=pathCat+'/'+name;
            scene = new QGraphicsScene();
            pix = new QGraphicsPixmapItem(fileName);
            pix->setPos(QPointF(xPos,yPos));
            scene->addItem(pix);
            QImage image(scene->width(), scene->height(), QImage::Format_ARGB32_Premultiplied);
//            image.fill(NULL);
            QPainter painter(&image);
            scene->render(&painter);
            image.save(savePix);
            ++hgf;
    }
}
Answer 1

Не понял, при чем тут итераторы, но вопрос перебора содержимого папок решается с помощью метода QDir::entryInfoList. Вот пример, который выведет все папки, которые имеются в заданной вами папке:

QDir dir("/path/to/dir");
dir.setFilter(QDir::Dirs);
QFileInfoList list = dir.entryInfoList();
for (int i = 0; i < list.size(); ++i) {
    QFileInfo fileInfo = list.at(i);
    std::cout << fileInfo.fileName().toStdString() << std::endl;
}
READ ALSO
QSqlTableModel не вызывается rowsInserted

QSqlTableModel не вызывается rowsInserted

При select в QSqlTableModel не вызывается сигнал rowsInsertedИ вызывается только тогда когда добавляется строка через insertRow

195
QLabel и текст с url

QLabel и текст с url

Как заставить QLabel выделять url в (не статичном) тексте и открывать их в браузере? Вот код для примера:

223
Сортировка объектов по алфавиту

Сортировка объектов по алфавиту

Как отсортировать объекты по инициалам? Те когда я буду заполнять массив объектов, хочу чтобы они выводились не в порядке заполнения, а по алфавитному...

215