我有一个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));
但是这个陈述给出了关键异常并且没有执行。知道为什么会这样吗?感谢。
答案 0 :(得分:1)
我建议在不需要时不使用原始指针,为什么需要保存QFile*
?我想你想用QTextStream(QIODevice *device)
创建一个流,然后你可以简单地将一个指针传递给你的文件,如果方法需要一个。
您遇到的问题是您创建了一个指向本地作用域QFile readfile
的指针,因为它是在堆栈上创建的,它将在AbsFileHandler::OpenAbsFile()
方法结束时被销毁。所以在方法返回后指针变为无效!
因此,解决方案只是保存QFile
(不是指针)或在QFile
堆上创建new QFile
以保持对象存活,但这不是一个好主意如果你必须自己管理内存并在以后删除它。