将QVector写入Qt中的文本文件

时间:2015-02-27 07:09:06

标签: c++ qt qvector qtextstream

我正在尝试编写一个程序,该程序读入包含多行512个元素的文本文件。这些是由制表符分隔的数字,文件的第一行包含有关文件本身的一般信息。这是它的样子:

512测量结果:Thu 12. Jun 18:35:44 2014评论:零 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 *'的转换;用&amp;获取参数的地址     QTextStream&amp; operator&lt;&lt;(const void * ptr);

任何帮助将不胜感激! :)

2 个答案:

答案 0 :(得分:2)

这是迭代器方法。 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();
}

答案 1 :(得分:1)

正如错误消息所示,没有QTextStream重载需要QVector<double>,但有double。所以只需遍历元素并单独循环它们。