Самое простое решение - получить dir для Applications, а затем использовать помощники Qt для его итерации - т.е. QDir и найти пакеты в виде каталогов, имена которых заканчиваются на «.app». Вот некоторый код для получения QDir из ссылочного типа папки - есть много похожих констант для получения папок desktop / trash / library. Значение 'domain' важно - для многих папок (например, Library) существует версия для каждого пользователя, а также глобальная и сетевая версии. FileVault может еще больше усложнить ситуацию.
Документация по FSFindFolder должна прояснить ситуацию, и в Интернете есть примеры.
static QDir applicationsDir()
{
short domain = kOnAppropriateDisk;
FSRef ref;
OSErr err = FSFindFolder(domain, kApplicationsFolderType, false, &ref);
if (err) {
return QDir();
}
return QDir(getFullPath(ref));
}
/*
Constructs a full unicode path from a FSRef.
*/
static QString getFullPath(const FSRef &ref)
{
QByteArray ba(2048, 0);
if (FSRefMakePath(&ref, reinterpret_cast<UInt8 *>(ba.data()), ba.size()) == noErr)
return QString::fromUtf8(ba).normalized(QString::NormalizationForm_C);
return QString();
}