QVector<QString> FileUtils::getAllFiles(const QString &path) { QVector<QString> result; QDir dir(path); QFileInfoList fileInfoLists = dir.entryInfoList(); QFileInfoList::const_iterator iterator = fileInfoLists.constBegin(); for(; iterator != fileInfoLists.constEnd(); iterator++) { QString filename = iterator->fileName(); if (!filename.startsWith(".")) { if (iterator->isDir()) { result += getAllFiles(iterator->absoluteFilePath()); } else if (iterator->isFile()) { result.push_back(iterator->absoluteFilePath()); } else { // } } } return result; }
void NowReadingEngine::update() { QFileInfoList okularFiles = getOkularXMLFiles(); QFileInfoList::const_iterator it = okularFiles.constBegin(); uint limit = MaxDataModelSize; for ( ; it != okularFiles.constEnd() && limit--; ++it) { QString okularFileName = it->absoluteFilePath(); DataModel::iterator itDm = _dataModel.find(okularFileName); if ((itDm != _dataModel.end()) && /* We have an entry for this element */ (itDm.value().accessTime >= it->lastModified())) { /* And it's up to date */ /* No need to update */ continue; } NowReadingEntry entry; if (convertOkularXMLFileToEntry(okularFileName, entry)) { setData(entry.path, "currentPage", entry.currentPage); setData(entry.path, "totalPages", entry.totalPages); setData(entry.path, "accessTime", entry.accessTime); _dataModel[okularFileName] = entry; } } /* Cleanup */ if (_dataModel.size() > MaxDataModelSize) { // Find elements to evict // First - what is the modification time of the last element we want to preserve? QDateTime oldestElementDate; QList<DataModel::mapped_type> values = _dataModel.values(); nth_element(values.begin(), values.begin()+MaxDataModelSize-1, values.end()); oldestElementDate = (values.begin()+MaxDataModelSize-1)->accessTime; // Now find all elements older than the oldest allowable DataModel::iterator it = _dataModel.begin(); while (it != _dataModel.end()) { if (it.value().accessTime < oldestElementDate) { removeSource(it.value().path); it = _dataModel.erase(it); } else { ++it; } } } /* Single shot timer used as in case the update takes very long we can get overflow of timer events to handle */ QTimer::singleShot(PollingInterval, this, SLOT(update())); }
int QgsSVGDiagramFactoryWidget::addDirectoryToPreview( const QString& path ) { //go through all files of a directory QDir directory( path ); if ( !directory.exists() || !directory.isReadable() ) { return 1; //error } QFileInfoList fileList = directory.entryInfoList( QDir::Files ); QFileInfoList::const_iterator fileIt = fileList.constBegin(); QProgressDialog progress( "Adding Icons...", "Abort", 0, fileList.size() - 1, this ); //cancel button does not seem to work properly with modal dialog //progress.setWindowModality(Qt::WindowModal); int counter = 0; for ( ; fileIt != fileList.constEnd(); ++fileIt ) { progress.setLabelText( tr( "Creating icon for file %1" ).arg( fileIt->fileName() ) ); progress.setValue( counter ); QCoreApplication::processEvents(); if ( progress.wasCanceled() ) { break; } QString filePath = fileIt->absoluteFilePath(); //test if file is svg or pixel format bool fileIsSvg = testSvgFile( filePath ); //exclude files that are not svg or image if ( !fileIsSvg ) { ++counter; continue; } QListWidgetItem * listItem = new QListWidgetItem( mPreviewListWidget ); if ( fileIsSvg ) { QIcon icon( filePath ); listItem->setIcon( icon ); } listItem->setText( "" ); //store the absolute icon file path as user data listItem->setData( Qt::UserRole, fileIt->absoluteFilePath() ); ++counter; } return 0; }
void parseFile(const QFileInfo& file, bool force_update=false) { if(!file.exists())return; if(file.isSymLink())return; //skip files in skiplist if(skip_paths.contains(file.fileName()))return; //force update on our files if(!force_update)force_update=our_paths.contains(file.filePath()); if(file.isDir()) { QString name=file.baseName(); //ignore system dirs if(name.length()==0 || name.at(0)==QChar('.'))return; QDir dir(file.absoluteFilePath()); QFileInfoList list = dir.entryInfoList( QDir::NoDotAndDotDot|QDir::Readable|QDir::Dirs|QDir::Files, QDir::DirsFirst|QDir::Name); QFileInfoList::const_iterator iter=list.constBegin(); for(;iter!=list.constEnd(); ++iter) { qDebug()<<"... "<<iter->filePath(); parseFile(*iter,force_update); } return; } if(file.isFile()) { filereported=false;//reset flag QStringList exts; exts<<"cpp"<<"c"<<"hpp"<<"h"<<"java"<<"qml"; QString ext=file.completeSuffix().toLower(); if(exts.contains(ext)) { qDebug()<<"Parsing "<<file.baseName(); processCXXFile(file.absoluteFilePath(),force_update); removeExtraLines(file.absoluteFilePath()); } else if(file.baseName().toLower()=="makefile") { qDebug()<<"Parsing "<<file.baseName(); processMakeFile(file.absoluteFilePath(),force_update); removeExtraLines(file.absoluteFilePath()); } } }
void tst_SuiteTest::checkTestSuiteResult() const { if(m_abortRun) QSKIP("This test takes too long time to run on the majority of platforms.", SkipAll); typedef QList<QFileInfo> QFileInfoList; const QFileInfo baseline(m_existingBaseline); const QFileInfo result(m_candidateBaseline); QFileInfoList list; list.append(baseline); list.append(result); const QFileInfoList::const_iterator end(list.constEnd()); QEventLoop eventLoop; const QPatternist::AutoPtr<Worker> worker(new Worker(eventLoop, m_existingBaseline, result)); /* Passed to ResultThreader so it knows what kind of file it is handling. */ ResultThreader::Type type = ResultThreader::Baseline; QProcess::execute(QLatin1String("p4 edit ") + m_existingBaseline); for(QFileInfoList::const_iterator it(list.constBegin()); it != end; ++it) { QFileInfo i(*it); i.makeAbsolute(); QVERIFY2(i.exists(), qPrintable(QString::fromLatin1("File %1 does not exist.") .arg(i.fileName()))); QFile *const file = new QFile(i.absoluteFilePath(), worker.data()); QVERIFY2(file->open(QIODevice::ReadOnly), qPrintable(QString::fromLatin1("Could not open file %1 for reading.") .arg(i.fileName()))); ResultThreader *handler = new ResultThreader(eventLoop, file, type, worker.data()); QObject::connect(handler, SIGNAL(finished()), worker.data(), SLOT(threadFinished())); handler->start(); /* Start the thread. It now parses the file and emits threadFinished() when done. */ type = ResultThreader::Result; } const int exitCode = eventLoop.exec(); QProcess::execute(QLatin1String("p4 revert -a ") + m_existingBaseline); QCOMPARE(exitCode, 0); }
void NewFormWidget::loadFrom(const QString &path, bool resourceFile, const QString &uiExtension, const QString &selectedItem, QTreeWidgetItem *&selectedItemFound) { const QDir dir(path); if (!dir.exists()) return; // Iterate through the directory and add the templates const QFileInfoList list = dir.entryInfoList(QStringList(QLatin1String("*.") + uiExtension), QDir::Files); if (list.isEmpty()) return; const QChar separator = resourceFile ? QChar(QLatin1Char('/')) : QDir::separator(); QTreeWidgetItem *root = new QTreeWidgetItem(m_ui->treeWidget); root->setFlags(root->flags() & ~Qt::ItemIsSelectable); // Try to get something that is easy to read. QString visiblePath = path; int index = visiblePath.lastIndexOf(separator); if (index != -1) { // try to find a second slash, just to be a bit better. const int index2 = visiblePath.lastIndexOf(separator, index - 1); if (index2 != -1) index = index2; visiblePath = visiblePath.mid(index + 1); visiblePath = QDir::toNativeSeparators(visiblePath); } const QChar underscore = QLatin1Char('_'); const QChar blank = QLatin1Char(' '); root->setText(0, visiblePath.replace(underscore, blank)); root->setToolTip(0, path); const QFileInfoList::const_iterator lcend = list.constEnd(); for (QFileInfoList::const_iterator it = list.constBegin(); it != lcend; ++it) { if (!it->isFile()) continue; QTreeWidgetItem *item = new QTreeWidgetItem(root); const QString text = it->baseName().replace(underscore, blank); if (selectedItemFound == 0 && text == selectedItem) selectedItemFound = item; item->setText(0, text); item->setData(0, TemplateNameRole, it->absoluteFilePath()); } }
// find default skins (resources) static const Skins &defaultSkins() { static Skins rc; if (rc.empty()) { const QString skinPath = QLatin1String(skinResourcePathC); QString pattern = QLatin1String("*."); pattern += QLatin1String(skinExtensionC); const QDir dir(skinPath, pattern); const QFileInfoList list = dir.entryInfoList(QDir::Dirs|QDir::NoDotAndDotDot, QDir::Name); if (list.empty()) return rc; const QFileInfoList::const_iterator lcend = list.constEnd(); for (QFileInfoList::const_iterator it = list.constBegin(); it != lcend; ++it) rc.push_back(SkinNamePath(it->baseName(), it->filePath())); } return rc; }
void QgsColorSchemeRegistry::addUserSchemes() { QString palettesDir = QgsApplication::qgisSettingsDirPath() + "/palettes"; QDir localDir; if ( !localDir.mkpath( palettesDir ) ) { return; } QFileInfoList fileInfoList = QDir( palettesDir ).entryInfoList( QStringList( "*.gpl" ), QDir::Files ); QFileInfoList::const_iterator infoIt = fileInfoList.constBegin(); for ( ; infoIt != fileInfoList.constEnd(); ++infoIt ) { addColorScheme( new QgsUserColorScheme( infoIt->fileName() ) ); } }
KipiImageCollectionShared::KipiImageCollectionShared(const QUrl& albumPath) : ImageCollectionShared(), m_albumPath(albumPath), m_images() { // go through the album and add its images: const QString albumPathString = m_albumPath.toLocalFile(); // add only the files, because recursion through directories should be // handled in KipiInterface::add[Selected]Album // TODO: restrict the search to images! const QFileInfoList files = QDir(albumPathString).entryInfoList(QDir::Files); for (QFileInfoList::const_iterator it = files.constBegin(); it!=files.constEnd(); ++it) { m_images.append(QUrl::fromLocalFile(it->absoluteFilePath())); } }
SyncTreeWidget::SyncTreeWidget(QDir master, QDir copy) : m_master(master), m_copy(copy) { QFileInfoList fil = master.entryInfoList(QDir::Dirs|QDir::Files|QDir::NoDotAndDotDot); for (QFileInfoList::const_iterator i = fil.constBegin(); i != fil.constEnd(); ++i) { FileTreeWidgetItem* ftw = FileTreeWidgetItem::makeTreeItem(*i, master, copy); ftw->loadKids(master, copy); addTopLevelItem(ftw); } QObject::connect(this, SIGNAL(itemExpanded(QTreeWidgetItem*)), this, SLOT(onExpanded(QTreeWidgetItem*))); QObject::connect(this, SIGNAL(itemPressed(QTreeWidgetItem*, int)), this, SLOT(onPressed(QTreeWidgetItem*, int))); }
//list all directories in $prefix/share/qgis/svg foreach( QString path, QgsApplication::svgPaths() ) { QDir svgDirectory( path ); if ( !svgDirectory.exists() || !svgDirectory.isReadable() ) { continue; //error } QFileInfoList directoryList = svgDirectory.entryInfoList( QDir::Dirs | QDir::NoDotAndDotDot ); QFileInfoList::const_iterator dirIt = directoryList.constBegin(); for ( ; dirIt != directoryList.constEnd(); ++dirIt ) { if ( addDirectoryToPreview( dirIt->absoluteFilePath() ) == 0 ) { mSearchDirectoriesComboBox->addItem( dirIt->absoluteFilePath() ); } } }
QMap<QString, QString> QgsComposerManager::defaultTemplates() const { QMap<QString, QString> templateMap; //search for default templates in $pkgDataPath/composer_templates QDir defaultTemplateDir( QgsApplication::pkgDataPath() + "/composer_templates" ); if ( !defaultTemplateDir.exists() ) { return templateMap; } QFileInfoList fileInfoList = defaultTemplateDir.entryInfoList( QDir::Files ); QFileInfoList::const_iterator infoIt = fileInfoList.constBegin(); for ( ; infoIt != fileInfoList.constEnd(); ++infoIt ) { templateMap.insert( infoIt->baseName(), infoIt->absoluteFilePath() ); } return templateMap; }
void QgsComposerPictureWidget::addStandardDirectoriesToPreview() { mPreviewListWidget->clear(); //list all directories in $prefix/share/qgis/svg QStringList svgPaths = QgsApplication::svgPaths(); for ( int i = 0; i < svgPaths.size(); i++ ) { QDir svgDirectory( svgPaths[i] ); if ( !svgDirectory.exists() || !svgDirectory.isReadable() ) { continue; } //add directory itself mSearchDirectoriesComboBox->addItem( svgDirectory.absolutePath() ); addDirectoryToPreview( svgDirectory.absolutePath() ); //and also subdirectories QFileInfoList directoryList = svgDirectory.entryInfoList( QDir::Dirs | QDir::NoDotAndDotDot ); QFileInfoList::const_iterator dirIt = directoryList.constBegin(); for ( ; dirIt != directoryList.constEnd(); ++dirIt ) { if ( addDirectoryToPreview( dirIt->absoluteFilePath() ) == 0 ) { mSearchDirectoriesComboBox->addItem( dirIt->absoluteFilePath() ); } } } //include additional user-defined directories for images QSettings s; QStringList userDirList = s.value( "/Composer/PictureWidgetDirectories" ).toStringList(); QStringList::const_iterator userDirIt = userDirList.constBegin(); for ( ; userDirIt != userDirList.constEnd(); ++userDirIt ) { addDirectoryToPreview( *userDirIt ); mSearchDirectoriesComboBox->addItem( *userDirIt ); } mPreviewsLoaded = true; }
QMap<QString, QString> QgsComposerManager::defaultTemplates( bool fromUser ) const { QMap<QString, QString> templateMap; //search for default templates in $pkgDataPath/composer_templates // user templates in $qgisSettingsDirPath/composer_templates QDir defaultTemplateDir( fromUser ? mUserTemplatesDir : mDefaultTemplatesDir ); if ( !defaultTemplateDir.exists() ) { return templateMap; } QFileInfoList fileInfoList = defaultTemplateDir.entryInfoList( QDir::Files ); QFileInfoList::const_iterator infoIt = fileInfoList.constBegin(); for ( ; infoIt != fileInfoList.constEnd(); ++infoIt ) { templateMap.insert( infoIt->baseName(), infoIt->absoluteFilePath() ); } return templateMap; }
QMap<QString, QString> MythTranslation::getLanguages(void) { QMap<QString, QString> langs; QDir translationDir(GetTranslationsDir()); translationDir.setNameFilters(QStringList("mythfrontend_*.qm")); translationDir.setFilter(QDir::Files); QFileInfoList translationFiles = translationDir.entryInfoList(); QFileInfoList::const_iterator it; for (it = translationFiles.constBegin(); it != translationFiles.constEnd(); ++it) { // We write the names incorrectly as all lowercase, so fix this before // sending to QLocale QString languageCode = (*it).baseName().section('_', 1, 1); QString countryCode = (*it).baseName().section('_', 2, 2); if (!countryCode.isEmpty()) languageCode = QString("%1_%2").arg(languageCode) .arg(countryCode.toUpper()); MythLocale locale(languageCode); QString language = locale.GetNativeLanguage(); if (language.isEmpty()) language = locale.GetLanguage(); // Fall back to English if (!countryCode.isEmpty()) { QString country = locale.GetNativeCountry(); if (country.isEmpty()) country = locale.GetCountry(); // Fall back to English language.append(QString(" (%1)").arg(country)); } langs[languageCode] = language; } return langs; }
QVector<QString> FileUtils::getAllImageFiles(const QString & path) { QVector<QString> result; QDir dir(path); QFileInfoList fileInfoLists = dir.entryInfoList(); QFileInfoList::const_iterator iterator = fileInfoLists.constBegin(); for(; iterator != fileInfoLists.constEnd(); iterator++) { QString filename = iterator->fileName(); if (!filename.startsWith(".")) { if (iterator->isDir()) { result += getAllImageFiles(iterator->absoluteFilePath()); } else if (iterator->isFile()) { QString ext = iterator->completeSuffix(); QString extLower = ext.toLower(); if (extLower.endsWith("png") || extLower.endsWith("jpg") || extLower.endsWith("jpeg")) { result.push_back(iterator->absoluteFilePath()); } } else { // } } } return result; }
// find default skins (resources) static const Skins &defaultSkins() { static Skins rc; if (rc.empty()) { #ifdef DEFAULT_SKINS_FROM_RESOURCE const QString skinPath = QLatin1String(skinResourcePathC); #else QString skinPath = QLibraryInfo::location(QLibraryInfo::PrefixPath); skinPath += QDir::separator(); skinPath += QLatin1String("tools"); skinPath += QDir::separator(); skinPath += QLatin1String("qvfb"); #endif QString pattern = QLatin1String("*."); pattern += QLatin1String(skinExtensionC); const QDir dir(skinPath, pattern); const QFileInfoList list = dir.entryInfoList(); if (list.empty()) return rc; const QFileInfoList::const_iterator lcend = list.constEnd(); for (QFileInfoList::const_iterator it = list.constBegin(); it != lcend; ++it) rc.push_back(SkinNamePath(it->baseName(), it->filePath())); } return rc; }
bool File::fileList(const String& dir, const String& file_pattern, StringList& output, bool full_path) { QDir d(dir.toQString(), file_pattern.toQString(), QDir::Name, QDir::Files); QFileInfoList list = d.entryInfoList(); //clear and check if empty output.clear(); if (list.empty()) { return false; } //resize output output.resize(list.size()); //fill output UInt i = 0; for (QFileInfoList::const_iterator it = list.constBegin(); it != list.constEnd(); ++it) { output[i++] = full_path ? it->filePath() : it->fileName(); } return true; }
QStringList AppearanceGTK2::installedThemes() const { QFileInfoList availableThemes; foreach(const QString& themesDir, QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, "themes", QStandardPaths::LocateDirectory)) { QDir root(themesDir); availableThemes += root.entryInfoList(QDir::NoDotAndDotDot|QDir::AllDirs); } //Check if there are themes installed by the user QDir user(QDir::homePath()+"/.themes"); availableThemes += user.entryInfoList(QDir::NoDotAndDotDot|QDir::AllDirs); //we just want actual themes QStringList paths; for(QFileInfoList::const_iterator it=availableThemes.constBegin(); it!=availableThemes.constEnd(); ++it) { bool hasGtkrc = QDir(it->filePath()).exists("gtk-2.0"); //If it doesn't exist, we don't want it on the list if(hasGtkrc) paths += it->filePath(); } return paths; }
void ShowFoto::openFolder(const QUrl& url) { if (!url.isValid() || !url.isLocalFile()) { return; } // Parse image IO mime types registration to get files filter pattern. QString filter; QStringList mimeTypes = supportedImageMimeTypes(QIODevice::ReadOnly, filter); QString patterns = filter.toLower(); patterns.append (QLatin1String(" ")); patterns.append (filter.toUpper()); qCDebug(DIGIKAM_SHOWFOTO_LOG) << "patterns=" << patterns; // Get all image files from directory. QDir dir(url.toLocalFile(), patterns); dir.setFilter(QDir::Files); if (!dir.exists()) { return; } QFileInfoList fileinfolist = dir.entryInfoList(); if (fileinfolist.isEmpty()) { //emit signalSorry(); return; } QFileInfoList::const_iterator fi; ShowfotoItemInfoList infos; ShowfotoItemInfo iteminfo; DMetadata meta; // And open all items in image editor. for (fi = fileinfolist.constBegin(); fi != fileinfolist.constEnd(); ++fi) { iteminfo.name = (*fi).fileName(); iteminfo.mime = (*fi).suffix(); iteminfo.size = (*fi).size(); iteminfo.folder = (*fi).path(); iteminfo.url = QUrl::fromLocalFile((*fi).filePath()); iteminfo.dtime = (*fi).created(); meta.load((*fi).filePath()); iteminfo.ctime = meta.getImageDateTime(); iteminfo.width = meta.getImageDimensions().width(); iteminfo.height = meta.getImageDimensions().height(); iteminfo.photoInfo = meta.getPhotographInformation(); infos.append(iteminfo); } if (d->droppedUrls) { d->infoList << infos; } else { d->infoList = infos; d->model->clearShowfotoItemInfos(); emit signalInfoList(d->infoList); slotOpenUrl(d->thumbBar->currentInfo()); } d->lastOpenedDirectory = QUrl::fromLocalFile(dir.absolutePath()); }
void InitAacEncTask::initAacEncImpl(const char *const toolName, const char *const fileNames[], const quint32 &toolMinVersion, const quint32 &verDigits, const quint32 &verShift, const char *const verStr, QRegExp ®ExpVer, QRegExp ®ExpSig) { static const size_t MAX_FILES = 8; const QString appPath = QDir(QCoreApplication::applicationDirPath()).canonicalPath(); QFileInfoList fileInfo; for(size_t i = 0; fileNames[i] && (fileInfo.count() < MAX_FILES); i++) { fileInfo.append(QFileInfo(QString("%1/%2").arg(appPath, QString::fromLatin1(fileNames[i])))); } for(QFileInfoList::ConstIterator iter = fileInfo.constBegin(); iter != fileInfo.constEnd(); iter++) { if(!(iter->exists() && iter->isFile())) { qDebug("%s encoder binaries not found -> Encoding support will be disabled!\n", toolName); return; } if((iter->suffix().compare("exe", Qt::CaseInsensitive) == 0) && (!MUtils::OS::is_executable_file(iter->canonicalFilePath()))) { qDebug("%s executable is invalid -> %s support will be disabled!\n", MUTILS_UTF8(iter->fileName()), toolName); return; } } qDebug("Found %s encoder binary:\n%s\n", toolName, MUTILS_UTF8(fileInfo.first().canonicalFilePath())); //Lock the encoder binaries QScopedPointer<LockedFile> binaries[MAX_FILES]; try { size_t index = 0; for(QFileInfoList::ConstIterator iter = fileInfo.constBegin(); iter != fileInfo.constEnd(); iter++) { binaries[index++].reset(new LockedFile(iter->canonicalFilePath())); } } catch(...) { qWarning("Failed to get excluive lock to encoder binary -> %s support will be disabled!", toolName); return; } QProcess process; MUtils::init_process(process, fileInfo.first().absolutePath()); process.start(fileInfo.first().canonicalFilePath(), QStringList() << "-help"); if(!process.waitForStarted()) { qWarning("%s process failed to create!", toolName); qWarning("Error message: \"%s\"\n", process.errorString().toLatin1().constData()); process.kill(); process.waitForFinished(-1); return; } quint32 toolVersion = 0; bool sigFound = regExpSig.isEmpty() ? true : false; while(process.state() != QProcess::NotRunning) { if(!process.waitForReadyRead()) { if(process.state() == QProcess::Running) { qWarning("%s process time out -> killing!", toolName); process.kill(); process.waitForFinished(-1); return; } } while(process.canReadLine()) { QString line = QString::fromUtf8(process.readLine().constData()).simplified(); if((!sigFound) && regExpSig.lastIndexIn(line) >= 0) { sigFound = true; continue; } if(sigFound && (regExpVer.lastIndexIn(line) >= 0)) { quint32 tmp[8]; if(MUtils::regexp_parse_uint32(regExpVer, tmp, qMin(verDigits, 8U))) { toolVersion = 0; for(quint32 i = 0; i < verDigits; i++) { toolVersion = (toolVersion * verShift) + qBound(0U, tmp[i], (verShift - 1)); } } } } } if(toolVersion <= 0) { qWarning("%s version could not be determined -> Encoding support will be disabled!", toolName); return; } else if(toolVersion < toolMinVersion) { qWarning("%s version is too much outdated (%s) -> Encoding support will be disabled!", toolName, MUTILS_UTF8(lamexp_version2string(verStr, toolVersion, "N/A"))); qWarning("Minimum required %s version currently is: %s\n", toolName, MUTILS_UTF8(lamexp_version2string(verStr, toolMinVersion, "N/A"))); return; } qDebug("Enabled %s encoder %s.\n", toolName, MUTILS_UTF8(lamexp_version2string(verStr, toolVersion, "N/A"))); size_t index = 0; for(QFileInfoList::ConstIterator iter = fileInfo.constBegin(); iter != fileInfo.constEnd(); iter++) { lamexp_tools_register(iter->fileName(), binaries[index++].take(), toolVersion); } }
int QgsComposerPictureWidget::addDirectoryToPreview( const QString& path ) { //go through all files of a directory QDir directory( path ); if ( !directory.exists() || !directory.isReadable() ) { return 1; //error } QFileInfoList fileList = directory.entryInfoList( QDir::Files ); QFileInfoList::const_iterator fileIt = fileList.constBegin(); QProgressDialog progress( "Adding Icons...", "Abort", 0, fileList.size() - 1, this ); //cancel button does not seem to work properly with modal dialog //progress.setWindowModality(Qt::WindowModal); int counter = 0; for ( ; fileIt != fileList.constEnd(); ++fileIt ) { progress.setLabelText( tr( "Creating icon for file %1" ).arg( fileIt->fileName() ) ); progress.setValue( counter ); QCoreApplication::processEvents(); if ( progress.wasCanceled() ) { break; } QString filePath = fileIt->absoluteFilePath(); //test if file is svg or pixel format bool fileIsPixel = false; bool fileIsSvg = testSvgFile( filePath ); if ( !fileIsSvg ) { fileIsPixel = testImageFile( filePath ); } //exclude files that are not svg or image if ( !fileIsSvg && !fileIsPixel ) { ++counter; continue; } QListWidgetItem * listItem = new QListWidgetItem( mPreviewListWidget ); listItem->setFlags( Qt::ItemIsSelectable | Qt::ItemIsEnabled ); if ( fileIsSvg ) { QIcon icon( filePath ); listItem->setIcon( icon ); } else //for pixel formats: create icon from scaled pixmap { QPixmap iconPixmap( filePath ); if ( iconPixmap.isNull() ) { ++counter; continue; //unknown file format or other problem } //set pixmap hardcoded to 30/30, same as icon size for mPreviewListWidget QPixmap scaledPixmap( iconPixmap.scaled( QSize( 30, 30 ), Qt::KeepAspectRatio ) ); QIcon icon( scaledPixmap ); listItem->setIcon( icon ); } listItem->setText( "" ); //store the absolute icon file path as user data listItem->setData( Qt::UserRole, fileIt->absoluteFilePath() ); ++counter; } return 0; }