QT文件打开和关闭
这是我的QFILE类的声明QT文件打开和关闭,qt,file,methods,Qt,File,Methods,这是我的QFILE类的声明 class AbsFileHandler { public: QFile absfile; QString absfilename; QTextStream absstream; void CreateAbsFile(); void CloseAbsFile(); AbsFileHandler() { }
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)
。
这就是你犯错误的原因