QT文件打开和关闭

QT文件打开和关闭,qt,file,methods,Qt,File,Methods,这是我的QFILE类的声明 class AbsFileHandler { public: QFile absfile; QString absfilename; QTextStream absstream; void CreateAbsFile(); void CloseAbsFile(); AbsFileHandler() { }

这是我的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();
    }
void AbsFileHandler::CreateAbsFile()
{
absfilename=absfilename+'.abs';
absfile(absfilename);
如果(!absfile.open(QIODevice::WriteOnly | QIODevice::Text))
qDebug()在这行中

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

absfile.setFileName(absfilename);
在这一行

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

absfile.setFileName(absfilename);

您得到错误是因为,看起来您想调用
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;
};
所以

这并不意味着将调用构造函数
QFile::QFile(const QString&name)
,而是调用在类
QFile
中未定义的
QFile::operator()(QString)

这就是您出错的原因。

您出错的原因是,看起来您想调用
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;
};
所以

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