在OSX上构建的app无法找到配置文件

时间:2015-04-03 22:06:56

标签: c++ xml macos qt

我正在用C ++开发应用程序,以便在不同的操作系统上进行分发。他们中的很多人都有一些在启动时读取的xml配置文件,即'my_app_config.cfg'。

在代码中,我使用Qt的文件对话框对象来访问文件,我使用boost / property_tree / xml_parser.hpp来进行xml解析。非常简单的东西,非常简单的xml文件。

在Windows和Linux上,这很好用,但是当我在Mac上创建应用程序时,如果无法打开文件,它总是会抛出我在代码中写的“无法读取配置文件:”消息。 / p>

奇怪的是,这只发生在我在启动时调用load_config()函数时 - 即在规范的Qt构造函数MainWindow::MainWindow(...)中。我可以在启动后使用调用相同load_config()函数的菜单项加载配置文件。

我想也许我应该将配置文件放在应用程序的Contents / MacOS文件夹中,其中实际的二进制文件是,但这也不起作用(加上我不希望我的用户看不到配置文件)。

这样的事情让我夜不能寐。

1 个答案:

答案 0 :(得分:3)

最近在Mac Qt应用程序中,默认工作目录不直观。它是硬盘的根源。

您可以在程序中对此进行验证:

qDebug() << QDir::currentPath();

http://doc.qt.io/qt-5/qdir.html#static-public-members

http://doc.qt.io/qt-5/qdir.html#currentPath

这是我放在Mac / OSX程序顶部的典型修补程序:

#if defined(Q_OS_MAC)
    // Doesn't default to its app directory.  Goes to root for some reason with Mavericks
    QDir::setCurrent(qApp->applicationDirPath());
    qDebug() << "Working Directory:" << QDir::currentPath();
#endif

现在您应该能够将配置文件复制到Contents/MacOS文件夹中,并且应该在运行时找到它。

另外请务必使用QSettingsQJsonQSettings非常适合存储设置和配置。

http://doc.qt.io/qt-5/qsettings.html#details

http://doc.qt.io/qt-5/json.html#overview

希望有所帮助。