2013-08-25 36 views
0

我是自学者,也是qt的新手(我只是想学习编写程序)。 尝试将csv文件加载到qtablewidget,但它覆盖所有列和具有相同数据的行。我试图按照How to import a CSV file to a QTableWidget,但我没有得到它的正确。在qtablewidget中加载csv(为什么我的代码不能正常工作?)

代码:

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

回答

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(";");

您的StringList包含:

约翰吉隆坡34 1335532 CA 0444344吾祚54 44432 NY 0322355 Lebal浩24 44022 NY 0110004。

这是您文件中的整个文本。换行符不重要。他们只是另一个角色。您将所有这些添加到一行中。你做了三次。

你想要的是首先将文本分成几行。您已在此处执行此操作:rowNumbers=allLine.split("\n");

用您的示例数据rowNumbers stringlist包含三个条目。每个条目都来自文件的一行。 这些行你必须拆分。

+0

介意解释我该如何做到这一点? – user2715275

+0

QTableWidgetItem * item = new QTableWidgetItem(rowCells [column]); myTable-> setItem(行,列项);只计算第一行。这似乎很容易,但我不知道为什么我完全坚持了解这一点。 – user2715275

+0

首先,我想感谢您的帮助文章的快速回复。如果你不介意发布一个工作代码,以便我可以知道代码是如何工作的(也许这对我的糟糕的英语来说是个问题),那么对我来说,这可能会更有帮助。我在Qt/gui编程方面的经验只有几天,这就是为什么我总是被卡住(即使是简单的事情)。再次感谢您的帮助! – user2715275

相关问题