将 QVector 写入 Qt 中的文本文件
Writing a QVector to a text file in Qt
我正在尝试编写一个程序来读取包含多行 512 个元素的文本文件。这些是由制表符分隔的数字,文件的第一行包含有关文件本身的一般信息。这是它的样子:
512 测量时间:2014 年 6 月 12 日星期四 18:35:44 评论:无
2.4155 1.60983 1.08339 0 2.13321 0 0.848402 0 0.747692 0 0.146487 0 1.98062 0 0.846876 0 1.87991 0.117494 0 0 0 0 1.6907 0 0 0 0.0671397 0.256352 1.33974 1.4313 1.17494 0 0 0 1.83566 0 2.54826 0 0 0 0 0 1.80819 0 0 0 0 0 4.78523 0 1.99283 0 2.63676 0 2.19272 0 0.962844 0.256352 0.762951 0.581369 0 0 0 0.689708 1.38552 2.38193 1.11391 3.22118 0.712596 0 0.508125 0 0 0.842298 0 0.794995 0.967422 0.820935 0.0534066 2.67338 0
等等等等
512 列中的每一列都代表一个单独的数据流,并且随着时间的推移对行进行采样。该程序计算数据的积分,从而吐出一个包含 512 个元素的向量,每个元素是相应列中所有数据的总和。
积分部分工作正常,我可以使用 qDebug 打印向量的输出,但是当我尝试将向量写入文本文件时出现错误。
这是我使用的代码:
void MainWindow::on_pushButton_clicked()
QVector<double> SingleLineData;
SingleLineData.resize(512);
QString test;
QString inputfile = QFileDialog::getOpenFileName(
this,
tr("Open File"),
"/Users",
"All files (*.*)"
);
if(inputfile != ""){
QFile file(inputfile);
if(!file.open(QFile::ReadOnly)){
}
QTextStream in(&file);
double buffer;
while(!file.atEnd()){
in.readLine();
for(int i=0; i<512; i++){
in >> buffer;
SingleLineData[i]+=buffer;
}
}
}
qDebug() << SingleLineData;
// ************* 文件输出 **************************** **********************
QString filename = "/Users/Mitch/Desktop/integral.txt";
QFile fileout(filename);
if (fileout.open(QFile::ReadWrite | QFile::Text)){
}
QTextStream out(&fileout);
out << SingleLineData;
fileout.close();
}
收到的错误是:
错误:二进制表达式的无效操作数('QTextStream' 和 'QVector')
和
候选函数不可行:第一个参数没有从 'QVector' 到 'const void *' 的已知转换;用 & 获取参数的地址
QTextStream &operator<<(const void *ptr);
如有任何帮助,我们将不胜感激! :)
正如错误消息所说,没有 QTextStream
需要 QVector<double>
的重载,但是有 double
。所以只需遍历元素并单独蒸它们。
这是迭代器方法。 QTextStream 的运算符没有超载以接受向量。但是,它可以接受双精度数。
QString filename = "/Users/Mitch/Desktop/integral.txt";
QFile fileout(filename);
if (fileout.open(QFile::ReadWrite | QFile::Text)){
QTextStream out(&fileout);
for (Qvector<double>::iterator iter = SingleLineData.begin(); iter != SingleLineData.end(); iter++){
out << *iter;
}
fileout.close();
}
我正在尝试编写一个程序来读取包含多行 512 个元素的文本文件。这些是由制表符分隔的数字,文件的第一行包含有关文件本身的一般信息。这是它的样子:
512 测量时间:2014 年 6 月 12 日星期四 18:35:44 评论:无
2.4155 1.60983 1.08339 0 2.13321 0 0.848402 0 0.747692 0 0.146487 0 1.98062 0 0.846876 0 1.87991 0.117494 0 0 0 0 1.6907 0 0 0 0.0671397 0.256352 1.33974 1.4313 1.17494 0 0 0 1.83566 0 2.54826 0 0 0 0 0 1.80819 0 0 0 0 0 4.78523 0 1.99283 0 2.63676 0 2.19272 0 0.962844 0.256352 0.762951 0.581369 0 0 0 0.689708 1.38552 2.38193 1.11391 3.22118 0.712596 0 0.508125 0 0 0.842298 0 0.794995 0.967422 0.820935 0.0534066 2.67338 0
等等等等
512 列中的每一列都代表一个单独的数据流,并且随着时间的推移对行进行采样。该程序计算数据的积分,从而吐出一个包含 512 个元素的向量,每个元素是相应列中所有数据的总和。
积分部分工作正常,我可以使用 qDebug 打印向量的输出,但是当我尝试将向量写入文本文件时出现错误。
这是我使用的代码:
void MainWindow::on_pushButton_clicked()
QVector<double> SingleLineData;
SingleLineData.resize(512);
QString test;
QString inputfile = QFileDialog::getOpenFileName(
this,
tr("Open File"),
"/Users",
"All files (*.*)"
);
if(inputfile != ""){
QFile file(inputfile);
if(!file.open(QFile::ReadOnly)){
}
QTextStream in(&file);
double buffer;
while(!file.atEnd()){
in.readLine();
for(int i=0; i<512; i++){
in >> buffer;
SingleLineData[i]+=buffer;
}
}
}
qDebug() << SingleLineData;
// ************* 文件输出 **************************** **********************
QString filename = "/Users/Mitch/Desktop/integral.txt";
QFile fileout(filename);
if (fileout.open(QFile::ReadWrite | QFile::Text)){
}
QTextStream out(&fileout);
out << SingleLineData;
fileout.close();
}
收到的错误是:
错误:二进制表达式的无效操作数('QTextStream' 和 'QVector') 和 候选函数不可行:第一个参数没有从 'QVector' 到 'const void *' 的已知转换;用 & 获取参数的地址 QTextStream &operator<<(const void *ptr);
如有任何帮助,我们将不胜感激! :)
正如错误消息所说,没有 QTextStream
需要 QVector<double>
的重载,但是有 double
。所以只需遍历元素并单独蒸它们。
这是迭代器方法。 QTextStream 的运算符没有超载以接受向量。但是,它可以接受双精度数。
QString filename = "/Users/Mitch/Desktop/integral.txt";
QFile fileout(filename);
if (fileout.open(QFile::ReadWrite | QFile::Text)){
QTextStream out(&fileout);
for (Qvector<double>::iterator iter = SingleLineData.begin(); iter != SingleLineData.end(); iter++){
out << *iter;
}
fileout.close();
}