QT文件打开和关闭

时间:2018-02-14 10:21:18

标签: qt file methods

这是我的QFILE类的声明。

class AbsFileHandler
    {

    public:
        QFile absfile;
        QString absfilename;
        QTextStream absstream;
        void CreateAbsFile();
        void CloseAbsFile();

        AbsFileHandler()
        {

        }
        ~AbsFileHandler()
        {
        }

    };

及其方法构建

void AbsFileHandler::CreateAbsFile()
    {

        absfilename = absfilename + '.abs';
        absfile(absfilename);

        if (!absfile.open(QIODevice::WriteOnly | QIODevice::Text))
            qDebug() << absfile.errorString();
        else
            qDebug() << "It worked";

    }

void AbsFileHandler::CloseAbsFile()
    {
        absfile.close();
    }

我在absfile中遇到错误(absfilename);声明。为什么这个陈述中的错误。谢谢。

2 个答案:

答案 0 :(得分:5)

在这一行

absfile(absfilename);

您尝试在QFile::operator()(QString)对象上调用absfile,但QFile类没有此方法。我想你想在打开它之前设置文件的名称,所以你应该使用QFile的setName(Qt3)或setFileName(qt4 / 5)方法。改变它

absfile.setFileName(absfilename);

答案 1 :(得分:1)

你遇到了错误,因为看起来你想调用QFile类的构造函数,如

QFile file(filename);

但问题是你之前声明了对象QFile,并且在初始化AbsFileHandler类的对象时在构造函数中初始化了它。

AbsFileHandler obj; // in this case default constructor AbsFileHandler::AbsFileHandler() will be called which empty (not empty actually)

AbsFileHandler::AbsFileHandler() {}将通过调用默认构造函数来初始化类中的所有对象:

class A {
public:
    A() : {} //Actually it means this:
    // A() : f(QFile()) {} 
private:
    QFile f;
};

所以

absfile(absfilename);

并不意味着将调用构造函数QFile::QFile(const QString &name),而是调用类QFile::operator()(QString)中未定义的QFile。 这就是为什么你有错误。