QDataStream成员间分配
QDataStream allocation between members
class ReadFile {
public:
void init();
QList<double> getData();
private:
QFile file;
QDataStream read;
double bufferFloat;
quint32 bufferInteger
}
现在的想法是,当调用 init() 时,应打开文件并将其导航到数据开始的位置。现在,每次调用 getData() 时,都应该从文件中读取一大块字节。
伪代码如下所示:
void ReadFile::init()
{
file.setFileName("...");
file.open(QIODevice::ReadOnly);
QDataStream read(&file);
// This chunk does some magic to find correct location by applying
// a readout (read >> bufferInteger) and check the result
// I can verify that at this point, if doing a readout (read >> bufferFloat)
// I get good data (i.e. corresponding to the file).
}
和
QList<double> ReadFile::getData()
{
// Doing a (read >> bufferFloat) at this point will result in zeros.
}
我明白为什么会这样,因为 init
中的 read
是在本地声明的。但是我应该如何分配数据流,以便 getData
可以从 init
停止的地方继续?下一个 getData
可以从上一个停止的地方继续。调用序列如下所示:
ReadFile file();
file.init();
file.readData();
file.readData();
file.readData();
file.readData();
//etc...
您的代码有错误。这一行:
QDataStream read(&file);
定义了一个局部变量,覆盖了class成员。相反,您应该这样做:
read.setDevice(&file);
class ReadFile {
public:
void init();
QList<double> getData();
private:
QFile file;
QDataStream read;
double bufferFloat;
quint32 bufferInteger
}
现在的想法是,当调用 init() 时,应打开文件并将其导航到数据开始的位置。现在,每次调用 getData() 时,都应该从文件中读取一大块字节。
伪代码如下所示:
void ReadFile::init()
{
file.setFileName("...");
file.open(QIODevice::ReadOnly);
QDataStream read(&file);
// This chunk does some magic to find correct location by applying
// a readout (read >> bufferInteger) and check the result
// I can verify that at this point, if doing a readout (read >> bufferFloat)
// I get good data (i.e. corresponding to the file).
}
和
QList<double> ReadFile::getData()
{
// Doing a (read >> bufferFloat) at this point will result in zeros.
}
我明白为什么会这样,因为 init
中的 read
是在本地声明的。但是我应该如何分配数据流,以便 getData
可以从 init
停止的地方继续?下一个 getData
可以从上一个停止的地方继续。调用序列如下所示:
ReadFile file();
file.init();
file.readData();
file.readData();
file.readData();
file.readData();
//etc...
您的代码有错误。这一行:
QDataStream read(&file);
定义了一个局部变量,覆盖了class成员。相反,您应该这样做:
read.setDevice(&file);