在QT中读取文本文件而不使用QFile

时间:2016-05-26 16:27:38

标签: c++ qt

我在将部分项目导入QT创建者时出现问题,因此我可以为其创建图形界面。 基本上,我现在最大的问题是程序不会从文本文件中读取数据。

Repo<Tree, 10> r1;
r1.setFileName("Trees.txt");
r1.loadFromFile();
assert(r1.getSize() == 4); //this gives me an error, since it considers the size to be 0(empty)

此代码应将我的数据从文件Tress.txt导入到容器中,但它在QT创建者中没有做任何事情(在Visual Studio中它完美地工作)。 函数setFileName(string n)和loadFromFile()是这些:

template <class T, int cap> void Repo<T, cap>::setFileName(string name)
{
    fileName = name;
}

template <class T, int cap> void Repo<T, cap>::loadFromFile()
{
    ifstream fin;
    T obj;
    fin.open(fileName);
    while (fin >> obj)
    {
        elem.push_back(obj);
        size++;
    }
}

我该怎么办这个问题?不要告诉我必须使用QFile课程。

1 个答案:

答案 0 :(得分:7)

当然,您 无法使用QFile。如果你这样做了,你就会遇到同样的问题。 Qt不是魔术,它不会神奇地使其他代码无效。

您永远不会检查是否有任何错误。如果你这样做,你会注意到你的程序无法打开文件,因为你打开了一个相对路径的文件,但你无法控制程序的工作目录。您需要在Trees.txt文件所在的目录中运行该程序,或者更好的是,通过UI或命令行参数为程序提供文件的绝对路径。

差异与Qt无关,只与你正在使用的IDE有关。无论您用于构建和运行代码的旧方法是什么,最终都会在Trees.txt文件所在的文件夹中运行该程序。事实并非如此。转到Qt Creator中的“Projects” - &gt;“Build&amp; Run”窗格,选择当前项目配置的Run选项卡,然后选择正确的工作目录。