2015-04-03 47 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

相關問題