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

时间:2010-03-09 05:43:43

标签: qt macos macos-carbon

我想使用Qt或Carbon从Mac上的Applications文件夹中读取应用程序列表。 我不知道该怎么做。所以任何指针都会受到赞赏。

由于 拉胡

2 个答案:

答案 0 :(得分:0)

您可以使用the opendir(3) and readdir(3) functionsthe Core Services File Manager中的FSOpenIterator和FSGetCatalogInfoBulk函数列出目录。

答案 1 :(得分:0)

最简单的解决方案是获取Applications目录,然后使用Qt帮助程序迭代它 - 即QDir,并查找bundle作为名称以'.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();
}