我是编程新手。我正在创建一个小字混杂游戏来练习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。它没有在安装目录箱中创建。
所以请帮助我,我做错了什么。还请告诉我如何让我的程序出现在应用程序 - >游戏列表中,这样我就可以从那里运行它而不是从命令提示符运行它。
答案 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 spec和adding .desktop files using CMake