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

发布于 2024-08-24 08:20:19 字数 87 浏览 7 评论 0原文

我想使用 Qt 或 Carbon 从 Mac 上的应用程序文件夹中读取应用程序列表。 我不知道该怎么做。因此,任何指示将不胜感激。

谢谢 拉胡尔

I want to read list of applications from the Applications folder on Mac using Qt or Carbon.
I am not sure how to do this. So any pointers will be appreciated.

Thanks
Rahul

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

成熟的代价 2024-08-31 08:20:19

最简单的解决方案是获取应用程序目录,然后使用 Qt 帮助程序对其进行迭代 - 即 QDir,并查找名称以“.app”结尾的目录。下面是一些从文件夹引用类型获取 QDir 的代码 - 有许多类似的常量,用于获取桌面/垃圾/库文件夹。 “域”值很重要 - 对于许多文件夹(例如,库),有每个用户版本以及全局和网络版本。 FileVault 会使事情变得更加复杂。

FFSfindFolder 上的文档应该会让事情变得更清楚,并且网络上到处都有示例。

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();
}

The easiest solution is to get the Applications dir and then use the Qt helpers to iterate over it - i.e QDir, and finding bundles as directories whose names end in '.app'. Here's some code to get a QDir from a folder reference type - there are many similar constants, to get the desktop/trash/library folders. The 'domain' value is important - for many folders (eg, Library) there's a per-user version as well as global and network versions. FileVault can complicate things further.

The documentation on FSFindFolder should make things clearer, and there's examples all over the web.

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();
}
云巢 2024-08-31 08:20:19

You can list a directory using either the opendir(3) and readdir(3) functions or the FSOpenIterator and FSGetCatalogInfoBulk functions from the Core Services File Manager.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文