在安装目录中创建文本文件(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 安装)的主要内容,如果未能解决你的问题,请参考以下文章