0

我是自学者并且是 qt 的新手(我只想学习编写程序)。尝试将 csv 文件加载到 qtablewidget 但它用相同的数据覆盖所有列和行。我试图按照如何将 CSV 文件导入到 QTableWidget但我没有正确理解它。

代码:

QFile file("testData.txt");
QTextStream in(&file);
QStringList setDataInrow;
QStringList rowNumbers;
QString allLine;

if(file.open(QIODevice::ReadOnly)){
    allLine=in.readAll();
    rowNumbers=allLine.split("\n");
    file.close();

}

QTableWidget *myTable=new QTableWidget();
myTable->setRowCount(rowNumbers.size());


for(int row=0;row<rowNumbers.count();row++)
{
    setDataInrow=allLine.split(";");


    for(int column=0;column<setDataInrow.count();column++){
        myTable->setColumnCount(setDataInrow.size());
        //myTable->item(row,column)->setText(setDataInrow[column]);
        QTableWidgetItem *item=new QTableWidgetItem(setDataInrow[column]);
        myTable->setItem(row,column,item);


    }
}


qDebug()<<"Numbers of row needed:"<<"\n"<<rowNumbers<<"\n";
qDebug()<<"Set following data to each column as per row:"<<"\n"<<setDataInrow<<setDataInrow.size();

window->setCentralWidget(myTable);
window->show();
return app.exec();

}

我正在尝试加载:

John Kl;34;1335532;CA;0444344
Kuma jo;54;44432;NY;0322355
Lebal ho;24;44022;NY;0110004 

它应该在 3 行和 5 列内加载,但它设置为 13 列。也许我无法正确地思考这一点。我需要一些代码示例的帮助,以便我可以更多地研究它。

由于我的英语不好(像我的代码一样糟糕 :))我截取了当前程序的屏幕截图,该程序没有按预期工作:

http://imageshack.us/a/img801/1601/le59.png

4

1 回答 1

0
setDataInrow=allLine.split(";");

您对每一行执行一次。但是您并没有按照您的意图拆分行,而是每次拆分整个文件的内容。

编辑:不要拆分 allLine。您已经有一个 QStringList,其中包含您的行:rowNumbers。

这个你必须分开。

for(int row=0;row<rowNumbers.count();row++){
  QStringList rowCells = rowNumbers.at(row).split(";");
  .....
}

我希望这能给你这个想法。不保证细节。

编辑2:

当你这样做

setDataInrow=allLine.split(";");

您的字符串列表包含:

John Kl 34 1335532 CA 0444344 Kuma jo 54 44432 NY 0322355 Lebal ho 24 44022 NY 0110004。

这是您文件中的全部文本。换行无关紧要。他们只是另一个角色。您将所有这些添加到一行中。你做了三遍。

你想要的是首先将文本分成几行。你已经在这里做到了: rowNumbers=allLine.split("\n");

使用您的示例数据,rowNumbers 字符串列表包含三个条目。文件中的每个条目一行。您必须拆分这些行。

于 2013-08-25T18:01:16.000 回答