从文本文件读取,然后写入 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 中的同一文件(高分功能)的主要内容,如果未能解决你的问题,请参考以下文章

求多线程读取一个文件,然后写到另外一个文件中的Java实现。

如何使批处理文件从网站读取文本然后将其写入文件? [复制]

在Android中从/向文件读取/写入字符串

如何使用镶木地板在火花中读取和写入同一个文件?

java中怎么对同一个文件读取两次或以上,用io

尝试打开并读取 .txt 文件,但它从原始文件中删除了实际文本(Qt GUI C++