c++ - Qt:读取 .txt 文件时遇到问题

标签 c++ qt

我几天前开始使用 Qt。然而,当我想读取一个文件时,尽管文件是打开的,但我无法从中获取一行。 qDebug 的输出是“文件已打开”,但是 while 没有做任何事情(我没有在我的 TextArea(文本编辑)中得到“它有效吗?”文本)。 我错过了什么?该文件肯定在那里,可以打开并且有 2 行。

    QFile file("savefile.txt");
    if (!file.open(QIODevice::ReadOnly))
    {
        qDebug()<<"The file is not open.";
        return;
    }
    else
    {
        qDebug()<<"The file is open.";
        QString line;
        QTextStream in(&file);
        while(!in.atEnd())
        {
            line = in.readLine();
            qDebug()<<"Line: "<<line.toLatin1();
            ui->TextArea->setText("Does it work?");
        }
        file.close();
    }

那么,我错过了什么? 我尝试根据 Qt 入门教程执行此操作,但没有创建对话框(Link to the page,向下滚动到“打开文件”)。 提前感谢您的帮助!

编辑 1: 由于文件有 2 行(正是“Asd.”和“asd.”),我用 for(int i = 0; i<2; i++) 替换了 while . QDebug 现在告诉我两次:

Line:  ""
Line:  ""

我假设 while(!in.atEnd()) 有问题.

EDIT2: 替换了循环和 in.readLine()ui->TextArea->setText(in.readAll().toLatin1()); .结果仍然相同(如果我使用 ui->TextArea->setText("Hey!");,它会起作用。

最佳答案

问题已通过以下方式解决:

<强>1。重新安装 Qt。

我使用 Qt 维护工具从我的 PC 上删除了该软件,然后重新下载了它。可能缺少某些文件。

<强>2。文件打不开的可能原因:文件夹错误

由于我将我的项目命名为 RPG(项目文件为 RPG.pro),我将文件放入文件夹 RPG 而不是放入同一目录中的另一个文件夹 build_RPG_desktop[...],其中包含ui_mainwindow 头文件(我没有更改 mainwindow 的默认名称)。使用以下代码重新安装 Qt 后,可以成功读取 build_RPG[...] 文件夹中的文件“Data.txt”:

QString fileName = "Data.txt";
if (!fileName.isEmpty())
{
    QFile file(fileName);
    if (!file.open(QIODevice::ReadOnly))
    {
        qDebug()<<"Error. File not found";
        return;
    }
    QTextStream in(&file);
    ui->TextArea->setText(in.readAll());
    file.close();
}

注意:我修改了 TextEdit 字段并将其名称设置为 TextArea。 ui->TextArea->setText() 设置文本编辑字段的内容。

关于c++ - Qt:读取 .txt 文件时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28053357/

相关文章:

c++ - Templated Defaulted 默认构造函数

C++ protobuf消息差异器的Python等效性

c++ - boost::any 类型更改导致非法访问

c++ - 如何知道进程是否是应用程序 - Windows

c++ - 如何获取从 C++ 中的特定类继承的所有已声明类的列表

c++ - QThread 总是留下一个线程

c++ - QDataStream 和 QByteArray 的区别

c++ - 删除子布局时如何让 QVBoxLayout 收缩 QDialog?

c++ - 我从 g++ 编译器收到此错误 - 从 ‘int*’ 到 ‘int’ 的无效转换 [-fpermissive]

qt - 如何制作一些可重用的 QML 对象,它可以注入(inject)另一个 QML 对象?