使用Qt从Mac上的应用程序文件夹读取应用程序列表

使用Qt从Mac上的应用程序文件夹读取应用程序列表,qt,macos,macos-carbon,Qt,Macos,Macos Carbon,我想使用Qt或Carbon从Mac上的应用程序文件夹中读取应用程序列表。 我不知道该怎么做。因此,任何指点都将受到赞赏 谢谢 Rahul您可以使用或中的FSOpenIterator和FSGetCatalogInfoBulk函数列出目录。最简单的解决方案是获取应用程序目录,然后使用Qt帮助程序对其进行迭代-即QDir,并将捆绑包作为名称以“.app”结尾的目录查找。下面是一些从文件夹引用类型获取QDir的代码-有许多类似的常量,用于获取桌面/垃圾箱/库文件夹。“域”值很重要-对于许多文件夹(例如,

我想使用Qt或Carbon从Mac上的应用程序文件夹中读取应用程序列表。 我不知道该怎么做。因此,任何指点都将受到赞赏

谢谢
Rahul

您可以使用或中的FSOpenIterator和FSGetCatalogInfoBulk函数列出目录。

最简单的解决方案是获取应用程序目录,然后使用Qt帮助程序对其进行迭代-即QDir,并将捆绑包作为名称以“.app”结尾的目录查找。下面是一些从文件夹引用类型获取QDir的代码-有许多类似的常量,用于获取桌面/垃圾箱/库文件夹。“域”值很重要-对于许多文件夹(例如,库)来说,有每个用户的版本以及全局和网络版本。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();
}

没有一个真正的应用程序文件夹/应用程序有子文件夹,人们可以将其应用程序放在任何地方,包括~/应用程序。我把我的放在另一个分区上。你可以考虑使用聚光灯来代替。