如何在 ios 上从 Qt 访问 assets 文件夹

Posted

技术标签:

【中文标题】如何在 ios 上从 Qt 访问 assets 文件夹【英文标题】:How to access assets folder from Qt on ios 【发布时间】:2014-04-14 18:42:54 【问题描述】:

我正在使用 Qt/QML 编写跨平台移动应用程序。该应用程序与一个小型 sqlite 数据库一起安装,该数据库在开始时从资产复制到应用程序数据位置,并且应该由应用程序访问。为此,我有 DatabaseManager 类。它包含提供不同平台资产路径的功能:

QString DatabaseManager::assetsPath()

    QString assetsPath;
#ifdef Q_OS_WIN
    assetsPath = QDir::toNativeSeparators("assets:/../database");
#endif

#ifdef Q_OS_android
    assetsPath = QDir::toNativeSeparators("assets:/database");
#endif

#ifdef Q_OS_ios
    assetsPath = QDir::toNativeSeparators("assets:/database");
#endif

#ifdef Q_OS_MAC
    assetsPath = QDir::toNativeSeparators("assets:/database");
#endif

    return assetsPath;


资产部署在 .pro 文件中,代码如下:

folder_qml.source = qml/HookahMixes
folder_qml.target = qml

folder_db.source = database
folder_db.target = .

DEPLOYMENTFOLDERS = folder_qml folder_db

问题是“assets:/”前缀在 Windows 和 Android 上运行良好,但不适用于 ios 和 Mac OS。 所以问题是:我应该使用什么路径来查找该平台上的数据库? 谢谢。

【问题讨论】:

【参考方案1】:

好的,是时候回答自己的问题了。 我使用的方法不正确,问题可以更容易解决:

Qt 生成 QtQuick2ApplicationViewer 类来处理主要的 qml 加载。在这个类中,您可以找到一个私有函数“adjustPath()”。此功能完全符合我们的需要 - 将您的本地资源路径映射到全球平台相关路径。为了使用该功能,我将其公开并以以下形式使用:

QString DatabaseManager::assetsPath()

    return m_Viewer.adjustPath("database");

就是这样。

【讨论】:

以上是关于如何在 ios 上从 Qt 访问 assets 文件夹的主要内容,如果未能解决你的问题,请参考以下文章

在 Linux 机器上从源代码构建 Qt-4.3.2

如何在 iPad 上从我的应用程序访问第三方应用程序?

在 Linux 上从源代码构建的 Qt5 上找不到 Qt 平台插件 xcb

在 Windows 上从 Qt Creator 进入 Qt Sources(不是从源代码构建的)

如何在 iOS 上从 Mapbox 解码“编码折线”

如何在 iOS 9.3+ 上从网页打开 Safari 的设置