我正在用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文件夹中,其中实际的二进制文件是,但这也不起作用(加上我不希望我的用户看不到配置文件)。
这样的事情让我夜不能寐。
答案 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
文件夹中,并且应该在运行时找到它。
另外请务必使用QSettings
和QJson
。 QSettings
非常适合存储设置和配置。
http://doc.qt.io/qt-5/qsettings.html#details
http://doc.qt.io/qt-5/json.html#overview
希望有所帮助。