在安装目录中创建文本文件(Qt应用程序)时出现问题(使用CMake进行安装)

时间:2011-04-09 09:39:22

标签: qt cmake

我是编程新手。我正在创建一个小字混杂游戏来练习qt编程。在这个应用程序中,我正在创建一个文本文件(score.txt)来保持玩家的得分。我这样做了:

    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.

安装(TARGETS wordJumbleGame DESTINATION bin)

我在/ home / myname / project / build /

中构建项目

我的源代码位于/ home / myname / project / src /

CMakeLists.txt位于/home/myname/project/CMakeLists.txt

我使用make install安装了程序。 直到这里一切正常。但现在的问题是,当我运行这个程序时(我从终端运行命令wordJumbleGame)它在/ home / myname / project / build目录中创建了score.txt。它没有在安装目录箱中创建。

所以请帮助我,我做错了什么。还请告诉我如何让我的程序出现在应用程序 - >游戏列表中,这样我就可以从那里运行它而不是从命令提示符运行它。

1 个答案:

答案 0 :(得分:1)

除非用斜杠(在unix上)或驱动器路径(Windows)作为前缀,否则QFile的构造函数参数是相对路径 - 相对于当前工作目录。 score.txt是在build /目录中创建的,因为这可能是你从中执行二进制文件的地方。

您无法将score.txt存储在/ usr / bin目录中,因为通常情况下,如果没有root权限,则无法写入。

您要做的是获取某个目录的路径,您可以在其中存储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