我有一個Qt程序,裏面有一些.txt文件。一開始我只是從我製作的某個目錄中讀取它們,但時機已到,並且有必要爲Mac OSX創建一個包。在cmake的幫助下,我設法將.txt文件放在/ Resources的.app目錄中,但是我沒有找到如何從那裏讀取它們。Qt從Resources Bundle Directory讀取文件
如何讀取這些文件,以便我可以從任何地方運行該應用程序?
我有一個Qt程序,裏面有一些.txt文件。一開始我只是從我製作的某個目錄中讀取它們,但時機已到,並且有必要爲Mac OSX創建一個包。在cmake的幫助下,我設法將.txt文件放在/ Resources的.app目錄中,但是我沒有找到如何從那裏讀取它們。Qt從Resources Bundle Directory讀取文件
如何讀取這些文件,以便我可以從任何地方運行該應用程序?
正如@MrEricSir指出的那樣,最好使用Qt resource system以及本地Qt類來通過流讀取文件。
但是,如果你還需要存儲在獨立的文件數據,您可以簡單地使用QCoreApplication::applicationDirPath()
方法,它的路徑返回到可執行文件,並將其包裝成自己的功能,以尊重不同平臺上的應用程序結構。
例如:
QString getResourcesPath()
{
#if defined(Q_OS_WIN)
return QApplication::applicationDirPath() + "/";
#elif defined(Q_OS_OSX)
return QApplication::applicationDirPath() + "/../Resources/";
#elif defined(Q_OS_LINUX)
return QApplication::applicationDirPath() + "/../share/yourapplication/";
#else
return QApplication::applicationDirPath() + "/";
#endif
}
此示例代碼假定:
.app
包的Resources
目錄中。根據Apple developer docs,可執行文件存儲在yourapplication.app/Contents/MacOS
目錄中,資源文件通常存儲在yourapplication.app/Contents/Resources
中。代碼只是相對於您的可執行文件前往Resources
目錄。bin
和share
目錄。當然,您可以使用opt
目錄或根本不捆綁您的應用程序 - 在這種情況下,您將不需要Linux的任何條件包含。有關更多信息,請閱讀Linux Filesystem Hierarchy Standard。
如果您希望應用程序是跨平臺的,您最好使用[Qt的資源系統](http://doc.qt.io/qt-5/resources.html)而不是Mac-特定應用程序包。 – MrEricSir
@MrEricSir我這樣做了,但由於某些原因我無法使用ifstreams從文件中讀取數據。或者我做錯了什麼?當涉及到.png時,同樣的方法(通過cmake)取得了成功,但.txt文件沒有被讀取。 – fminkin
C++的'ifstream'不知道如何從Qt的內部格式中讀取,但是相應的Qt文件管理類肯定是這樣的,例如'QFile','QTextStream'等。 – MrEricSir