453QString QStandardPaths::locate(StandardLocation type,
const QString &fileName, LocateOptions options)
455 const QStringList &dirs = standardLocations(type);
456 for (QStringList::const_iterator dir = dirs.constBegin(); dir != dirs.constEnd(); ++dir) {
457 const QString path = *dir + u'/' + fileName;
458 if (existsAsSpecified(path, options))
467QStringList QStandardPaths::locateAll(StandardLocation type,
const QString &fileName, LocateOptions options)
469 const QStringList &dirs = standardLocations(type);
471 for (QStringList::const_iterator dir = dirs.constBegin(); dir != dirs.constEnd(); ++dir) {
472 const QString path = *dir + u'/' + fileName;
473 if (existsAsSpecified(path, options))
479static Q_DECL_COLD_FUNCTION QString fallbackPathVariable()
487 size_t n = confstr(_CS_PATH,
nullptr, 0);
490 QVarLengthArray<
char, 1024> rawpath(n);
491 confstr(_CS_PATH, rawpath.data(), n);
492 return QString::fromLocal8Bit(QByteArrayView(rawpath.data(), n - 1));
522 const QString &executableName)
524 const QDir currentDir = QDir::current();
525 for (
const QString &searchPath : searchPaths) {
526 const QString candidate = currentDir.absoluteFilePath(searchPath + u'/' + executableName);
527 const QString absPath = checkExecutable(candidate);
528 if (!absPath.isEmpty())
539 searchExecutableAppendSuffix(
const QStringList &searchPaths,
560QString QStandardPaths::findExecutable(
const QString &executableName,
const QStringList &paths)
562 if (QFileInfo(executableName).isAbsolute())
563 return checkExecutable(executableName);
565 QStringList searchPaths = paths;
566 if (paths.isEmpty()) {
567 QString pEnv = qEnvironmentVariable(
"PATH");
568 if (Q_UNLIKELY(pEnv.isNull())) {
572 pEnv = fallbackPathVariable();
576 searchPaths.reserve(pEnv.count(QDir::listSeparator()));
577 auto tokenizer = qTokenize(pEnv, QDir::listSeparator(), Qt::SkipEmptyParts);
578 for (QStringView rawPath : tokenizer) {
579 QString cleanPath = QDir::cleanPath(rawPath.toString());
580 if (cleanPath.size() > 1 && cleanPath.endsWith(u'/'))
581 cleanPath.truncate(cleanPath.size() - 1);
582 searchPaths.push_back(cleanPath);
589 static const QStringList executable_extensions = executableExtensions();
590 if (executableName.contains(u'.')) {
591 const QString suffix = QFileInfo(executableName).suffix();
592 if (suffix.isEmpty() || !executable_extensions.contains(u'.' + suffix, Qt::CaseInsensitive))
593 return searchExecutableAppendSuffix(searchPaths, executableName, executable_extensions);
595 return searchExecutableAppendSuffix(searchPaths, executableName, executable_extensions);
598 return searchExecutable(searchPaths, executableName);
608QString QStandardPaths::displayName(StandardLocation type)
611 case DesktopLocation:
612 return QCoreApplication::translate(
"QStandardPaths",
"Desktop");
613 case DocumentsLocation:
614 return QCoreApplication::translate(
"QStandardPaths",
"Documents");
616 return QCoreApplication::translate(
"QStandardPaths",
"Fonts");
617 case ApplicationsLocation:
618 return QCoreApplication::translate(
"QStandardPaths",
"Applications");
620 return QCoreApplication::translate(
"QStandardPaths",
"Music");
622 return QCoreApplication::translate(
"QStandardPaths",
"Movies");
623 case PicturesLocation:
624 return QCoreApplication::translate(
"QStandardPaths",
"Pictures");
626 return QCoreApplication::translate(
"QStandardPaths",
"Temporary Directory");
628 return QCoreApplication::translate(
"QStandardPaths",
"Home");
629 case AppLocalDataLocation:
630 return QCoreApplication::translate(
"QStandardPaths",
"Application Data");
632 return QCoreApplication::translate(
"QStandardPaths",
"Cache");
634 return QCoreApplication::translate(
"QStandardPaths",
"State");
635 case GenericDataLocation:
636 return QCoreApplication::translate(
"QStandardPaths",
"Shared Data");
637 case RuntimeLocation:
638 return QCoreApplication::translate(
"QStandardPaths",
"Runtime");
640 return QCoreApplication::translate(
"QStandardPaths",
"Configuration");
641 case GenericConfigLocation:
642 return QCoreApplication::translate(
"QStandardPaths",
"Shared Configuration");
643 case GenericCacheLocation:
644 return QCoreApplication::translate(
"QStandardPaths",
"Shared Cache");
645 case GenericStateLocation:
646 return QCoreApplication::translate(
"QStandardPaths",
"Shared State");
647 case DownloadLocation:
648 return QCoreApplication::translate(
"QStandardPaths",
"Downloads");
649 case AppDataLocation:
650 case AppConfigLocation:
651 return QCoreApplication::translate(
"QStandardPaths",
"Application Configuration");
652 case PublicShareLocation:
653 return QCoreApplication::translate(
"QStandardPaths",
"Public");
654 case TemplatesLocation:
655 return QCoreApplication::translate(
"QStandardPaths",
"Templates");