在安装目录中创建文本文件(Qt 应用程序)的问题(使用 CMake 安装)

Posted

技术标签:

【中文标题】在安装目录中创建文本文件(Qt 应用程序)的问题(使用 CMake 安装)【英文标题】:Problem in creating text file(Qt application) in installation directory (using CMake to install) 【发布时间】:2011-04-09 09:39:22 【问题描述】:

我是编程新手。我正在创建一个小单词拼字游戏来练习 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。它不是在安装目录 bin 中创建的。

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

【问题讨论】:

【参考方案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 spec 和 adding .desktop files using CMake

【讨论】:

以上是关于在安装目录中创建文本文件(Qt 应用程序)的问题(使用 CMake 安装)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 QT QML 中创建自己的目录?

关于在 QT 中创建项目

在 C++、QT 中创建 setup.exe [重复]

如何在qt4的文本编辑框中创建多个选择?

如何在 Qt 中创建共享小部件的子目录?

Qt打开现有 Qt 项目 ( 打开已存在的项目 | 运行打开的项目 )