2015-04-03 53 views
-1

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

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

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

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

我想也许我应该把配置文件放在应用程序的Contents/MacOS文件夹中,但实际的二进制文件无效,但这也不起作用(另外我不希望配置文件对用户不可见)。

这样的事情让我在晚上保持清醒。

+0

为什么这会被拒绝?这是一个很好的问题。 – dmedine 2015-04-04 00:11:59

回答

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

希望有所帮助。

+0

谢谢@phyatt。我会试试这个。顺便说一句,你有没有把我的问题投下来?似乎不太可能,因为你花时间发布这个非常清晰和彻底的答案。我认为这是一个很好的问题。 – dmedine 2015-04-04 00:15:04

+0

我没有downvote它。我认为downvoter可能认为这个问题不清楚或者有很多不重要的信息。 http://stackoverflow.com/help/how-to-ask我把问题的要点写得很快,并把我的两分钱。 – phyatt 2015-04-04 00:35:03

+0

为了确认,我实施了phyatt的修复程序,它实现了诀窍。再次感谢。 – dmedine 2015-04-06 17:18:22

相关问题