загрузка csv в qtablewidget (почему мой код не работает?)

Я самоучка и новичок в 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


person user2715275    schedule 25.08.2013    source источник


Ответы (1)


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 содержит три записи. Каждая запись одной строки из вашего файла. Эти строки нужно разделить.

person Greenflow    schedule 25.08.2013
comment
Не могли бы объяснить, как я могу это сделать, пожалуйста? - person user2715275; 25.08.2013
comment
QTableWidgetItem *item=new QTableWidgetItem(rowCells[column]); myTable-›setItem(строка,столбец,элемент); считая только первую строку. Это кажется простым, но я не знаю, почему я полностью застрял, чтобы понять это. - person user2715275; 26.08.2013
comment
Во-первых, я хочу поблагодарить вас за быстрый ответ с постом помощи. Возможно, для меня было бы действительно полезнее, если бы вы не возражали опубликовать рабочий код, чтобы я мог понять, как работает код (может быть, это проблема для моего плохого АНГЛИЙСКОГО). Мой опыт программирования Qt/gui составляет всего несколько дней, поэтому я всегда застреваю (даже в простых вещах). Еще раз спасибо за помощь мне! - person user2715275; 26.08.2013
comment
Уже не расщепляется? Если я делаю QStringList rowCells = rowNumbers.at(row).split(;); затем rowCells содержит первую строку: (John Kl, 34, 1335532, CA, 0444344) и правильно устанавливает первую строку. Я просто не могу перейти на следующую строку. Это всегда происходит, когда я разбиваю строку, Confused! - person user2715275; 26.08.2013