从文本文件读取,然后写入 QT 中的同一文件(高分功能)
Posted
技术标签:
【中文标题】从文本文件读取,然后写入 QT 中的同一文件(高分功能)【英文标题】:Reading from text file, then writing to same file in QT (High score feature) 【发布时间】:2015-12-14 00:00:06 【问题描述】:我正在尝试在我正在制作的简单 QT 5.5 游戏上实现高分功能。我可以让它读取当前的高分,但是如果玩家的分数比当前的高分好,我希望它把新的名字和高分写入同一个文件。目前,我收到错误消息 QIODevice::write (QFile, ":\images\scores.txt"): device not open。我的 score.txt 文件包含在我的 .qrc 中。
这是我的代码:
QFile myFile (":/images/scores.txt");
myFile.open(QIODevice::ReadOnly);
QTextStream in(&myFile);
QString qName = in.readLine();
QString qScore = in.readLine();
myFile.close();
bool ok;
if(qScore.toInt() < myScore)
QInputDialog* inputDialog = new QInputDialog();
inputDialog->setOptions(QInputDialog::NoButtons);
qName = inputDialog->getText(NULL ,"High Score!",
"Enter Name:", QLineEdit::Normal,
"Grandma", &ok);
if (ok && !qName.isEmpty())
qDebug() << "Good Job!";
qScore = QString::number(myScore);
string nameS, scoreS;
nameS = qName.toStdString();
scoreS = qScore.toStdString();
myFile.open(QIODevice::WriteOnly);
QTextStream out (&myFile);
out << nameS.c_str() << endl << scoreS.c_str();
myFile.flush();
myFile.close();
【问题讨论】:
文件:/images/scores.txt
是编译到可执行文件中的资源文件。因此,它不能被写入。如果您希望能够写入文件,则需要使用磁盘上的实际文件。
成功了!谢谢。
【参考方案1】:
如上所述,您不能写入qrc
资源文件。您可以写入磁盘上的任意文件,但这会引发存储位置的问题。处理此问题的一种方法是使用QSettings Class。
非常好用:How to Use QSettings
来自文档:
QSettings 类提供持久性 平台无关的应用程序设置。
用户正常 期望应用程序记住它的设置(窗口大小和 位置,选项等)跨会话。这些信息经常 存储在 Windows 的系统注册表和属性列表文件中 在 OS X 和 ios 上。在 Unix 系统上,在没有标准的情况下,许多 应用程序(包括 KDE 应用程序)使用 INI 文本文件。
QSettings 是围绕 这些技术,使您能够保存和恢复应用程序 以便携的方式进行设置。它还支持自定义存储格式。
【讨论】:
以上是关于从文本文件读取,然后写入 QT 中的同一文件(高分功能)的主要内容,如果未能解决你的问题,请参考以下文章