2013-08-25 6 views
0

Я самодостаточен и новичок в qt (я просто хочу научиться писать программу). Пытается загрузить файл csv в qtablewidget, но он переопределяет все столбцы и строку с одинаковыми данными. Я попытался следовать How to import a CSV file to a QTableWidget, но я не понял его правильно.loading csv in 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

ответ

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

Вы можете сделать это один раз для каждой строки. Но вы не разделяете строку, как вы предполагали, но каждый раз весь контент файла.

Редактировать: Не разделить allLine. У вас уже есть QStringList, который содержит ваши строки: rowNumbers.

Это вы должны разделить.

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

Надеюсь, это даст вам эту идею. Никакой гарантии для деталей.

Edit 2:

Когда вы

setDataInrow=allLine.split(";");

ваш StringList содержит:

John Kl 34 1335532 CA 0444344 Kuma джо 54 44432 NY 0322355 Lebal хо 24 44022 NY 0110004.

Это целый текст в вашем файле. Разрыв строки не имеет значения. Это всего лишь еще один персонаж. Вы добавляете все это в одну строку. И вы делаете это три раза.

Что вы хотите, сначала разделите текст на строки. Вы уже делаете это здесь: rowNumbers=allLine.split("\n");

С данными вашего примера строковый список rowNumbers содержит три записи. Каждая запись в одной строке из вашего файла. Эти линии вы должны разделить.

+0

Ум, объясняющий, как я могу это сделать, пожалуйста? – user2715275

+0

QTableWidgetItem * item = new QTableWidgetItem (rowCells [column]); myTable-> SetItem (строка, столбец, пункт); считая только первую строку. Это кажется легким, но я не знаю, почему я полностью застрял, чтобы понять это. – user2715275

+0

Сначала я хочу поблагодарить вас за быстрый ответ с помощью сообщения.Возможно, для меня было бы более полезным, если вы не возражаете опубликовать рабочий код, чтобы я мог понять, как работает код (может быть, это проблема для моего плохого английского языка). Мой опыт программирования Qt/gui - всего лишь несколько дней, поэтому я всегда застреваю (даже для простых вещей). Еще раз спасибо за помощь! – user2715275

 Смежные вопросы

  • Нет связанных вопросов^_^