Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在没有QFile的情况下读取QT中的文本文件_C++_Qt - Fatal编程技术网

C++ 在没有QFile的情况下读取QT中的文本文件

C++ 在没有QFile的情况下读取QT中的文本文件,c++,qt,C++,Qt,我在将我的项目的一部分导入QT creator时遇到问题,因此我可以为它创建一个图形界面。 基本上,我现在最大的问题是程序不会从文本文件中读取数据 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) Repo r

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

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)
Repo r1;
r1.setFileName(“Trees.txt”);
r1.loadFromFile();
断言(r1.getSize()==4)//这给了我一个错误,因为它认为大小为0(空)
这段代码应该将我的数据从文件Tress.txt导入到一个容器中,但它在QT creator中没有做任何事情(在visualstudio中它工作得非常好)。 函数setFileName(字符串n)和loadFromFile()如下:

template <class T, int cap> void Repo<T, cap>::setFileName(string name)
{
    fileName = name;
}
模板void Repo::setFileName(字符串名称)
{
fileName=名称;
}

模板void Repo::loadFromFile()
{
流鳍;
T-obj;
打开(文件名);
而(fin>>obj)
{
元素推回(obj);
大小++;
}
}
关于这个问题,我能做些什么?不要告诉我我必须使用QFile类。

当然你不必使用
QFile
。如果你这样做了,你也会有同样的问题。Qt不是魔法,它不会神奇地使其他代码无法工作

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


这种差异与Qt无关,只是与您正在使用的IDE有关。无论您过去构建和运行代码的方式是什么,最终程序都会运行在
Trees.txt
文件所在的文件夹中。现在已经不是这样了。转到Qt Creator中的“项目”->“构建和运行”窗格,选择当前项目配置的“运行”选项卡,并选择适当的工作目录。

那么我应该将文件移动到程序的工作目录吗?目前,文本文件位于“C:\Users\Mihai\Documents\lab14”中,我的所有其他源/头文件也位于其中。那我该把它放在哪里呢?没关系,终于弄明白了。必须将其写入r1.setFileName(“C:\\Users\\Mihai\\Documents\\lab14\\Pom.txt”);(出于某种原因,双黑斜杠)。谢谢你的帮助!由于某种原因,请记住在
c++
中,``是字符串文字中的一个特殊字符。
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++;
    }
}