【问题标题】:QTextStream and QFile pointerQTextStream 和 QFile 指针
【发布时间】:2018-02-20 12:09:16
【问题描述】:

我有一个类是 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));

但是这个语句给出了严重的异常并且退出了执行。知道为什么会这样吗?谢谢。

【问题讨论】:

    标签: file pointers qfile qtextstream


    【解决方案1】:

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

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

    所以解决方案只是保存一个QFile(不是指针)或使用new QFile 在堆上创建QFile 以保持对象处于活动状态,但如果您必须管理自己记忆,以后再删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多