QTextStream和QFile指针

时间:2018-02-20 12:09:17

标签: file pointers qfile qtextstream

我有一个absfilehandler类,它有一个像这样的QFILE指针..

QString absfilename;
QFile * absfilepointer;

我有一个开场方法。

bool  AbsFileHandler::OpenAbsFile()
{


    QFile readfile(absfilename);
    absfilepointer = (&readfile);

    if (!(*absfilepointer).exists())
    {
        qDebug() << "The file" << (*absfilepointer).fileName() << "does not exist.";
        return false;
    }

    else if (!(*absfilepointer).open((QIODevice::ReadOnly) | (QIODevice::Text)))
    {
        qDebug() << "Could not open" << (*absfilepointer).fileName() << "for reading.";
        return false;
    }
    else
    {
        qDebug() << "File ready to read";
        return true;
    }
}

我在另一个类中使用与此类相同的对象调用该方法 myAbsFileHandler.OpenAbsFile()

如果返回true,则执行此

QTextStream readabsstream((myAbsFileHandler.absfilepointer));

但是这个陈述给出了关键异常并且没有执行。知道为什么会这样吗?感谢。

1 个答案:

答案 0 :(得分:1)

我建议在不需要时不使用原始指针,为什么需要保存QFile*?我想你想用QTextStream(QIODevice *device)创建一个流,然后你可以简单地将一个指针传递给你的文件,如果方法需要一个。

您遇到的问题是您创建了一个指向本地作用域QFile readfile的指针,因为它是在堆栈上创建的,它将在AbsFileHandler::OpenAbsFile()方法结束时被销毁。所以在方法返回后指针变为无效!

因此,解决方案只是保存QFile(不是指针)或在QFile堆上创建new QFile以保持对象存活,但这不是一个好主意如果你必须自己管理内存并在以后删除它。