2011-04-09 77 views
0

我是編程新手。我正在創建一個小字混雜遊戲來練習qt編程。在這個應用程序中,我創建了一個文本文件(score.txt)來保持玩家的分數。我已經通過:在安裝目錄中創建文本文件(Qt應用程序)時出現問題(使用CMake安裝)

QFile scoreFile("score.txt"); 
    if (QFile::exists("score.txt")) 
    { 
     scoreFile.open(QIODevice::ReadWrite | QIODevice::Text) 
     // and update the score. 
    } 
    else 
    { 
     scoreFile.open(QIODevice::ReadWrite | QIODevice::Text);//create score file 
     //and write the score to it. 
    } 

此代碼在這裏工作良好。現在,我使用CMake的構建和安裝使用此代碼生成的二進制(我工作在Ubuntu):

#set project name, version and build code here. 

安裝(靶向wordJumbleGame目標紙)

我在建項目的/ home/MYNAME /項目/建設/

我的源代碼是在/ home/MYNAME /項目/ src目錄/

的CMakeLists.txt是/home/myname/project/CMakeLists.txt

我使用make install安裝了程序。 直到這裏所有的東西都正常工作。但現在的問題是,當我運行這個程序(我從終端運行命令wordJumbleGame運行它)它在/ home/myname/project/build目錄中創建score.txt。它不是在安裝目錄bin中創建的。

所以請幫助我,我做錯了什麼。還請告訴我如何讓我的程序出現在應用程序 - >遊戲列表中,以便我可以從那裏運行它而不是從命令提示符處運行。

回答

1

除非在斜線(在unix上)或驅動器路徑(Windows)上加前綴,否則QFile的構造函數參數是相對於當前工作目錄的相對路徑。 score.txt是在build /目錄下創建的,因爲這可能是你執行二進制文件的地方。

您不能將score.txt存儲在/ usr/bin目錄中,因爲通常情況下,您不能在沒有root權限的情況下寫入score.txt。

你想要做的是獲得一個目錄的路徑,你可以存儲你的score.txt文件。爲此,您可以使用QDesktopServices類。這將爲您提供每個用戶的目錄信息。這裏有一個例子:

#include <QDesktopServices> 

// this would go in main(), probably 
QCoreApplication::setApplicationName("word jumble game"); 

// now when you want to read/write the scores file: 
QString dataPath = QDesktopService::storageLocation(QDesktopService::DataLocation); 
QFile scoreFile(dataPath + "score.txt"); 

// on my system, this produces: "/home/adam/.local/share/data/word jumble game/score.txt" 
// it will produce something similar for Windows and Mac too 

你應該獲得路徑信息,以保持用戶數據目錄漂亮和組織之前通過QCoreApplication::setApplicationName設置你的名字器件的應用。

至於讓您的應用程序在遊戲列表中,您需要創建一個遵循freedesktop.org規範的菜單條目。 我幫不了你,但 this是一個很好的起點。其他人可能會爲你提供更多信息。

您需要創建一個.desktop條目文件並使用xdg-desktop-menu install進行安裝。這裏有兩個資源給你:freedesktop.org menu specadding .desktop files using CMake

+0

感謝Adam幫助。 – UNK 2011-04-09 12:46:18

相關問題