Как импортировать файл CSV в QTableWidget - PullRequest
1 голос
/ 06 февраля 2012

Я студент-программист, и я использую Qt для разработки графического интерфейса для работы, и у меня возникают проблемы с выяснением, как мне следует заставить эту функцию импорта работать.Немного программистов-писателей блокируют, если хотите.Пока у меня есть это для кода:

void InjectionLocationsDialogExpanded::importCSVFile()
{
    QString fileName = QFileDialog::getOpenFileName(this, ("Open File"), "/home", ("csv File(*.csv)"));
    QString data;
    QFile importedCSV(fileName);
    QStringList rowOfData;
    QStringList rowData;
    int tempint = 0;
    data.clear();
    rowOfData.clear();
    rowData.clear();
    if (importedCSV.open(QFile::ReadOnly))
    {
        data = importedCSV.readAll();
        rowOfData = data.split("\n");
        rowData = data.split(";");
        importedCSV.close();
    }
    qDebug() << data;
    for (int x = 0; x < rowOfData.size(); x++)
    {
        for (int y = 0; y < ui->tableWidgetInjectionLocationsExpandedDialog->columnCount(); y++)
        {
            ui->tableWidgetInjectionLocationsExpandedDialog->item(x,y)->setText(rowData[]);
        }
    }
}

Проблема здесь в том, что я не знаю, как получить settext каждого элемента в таблице для ссылки на следующий элемент в rowData QStringList.Мне нужно увеличить на одну позицию, но я не могу использовать int ++, потому что он в конечном итоге ищет элемент в QStringList, который не существует, и вызывает ошибку сегментации.Я также не могу использовать цикл for, чтобы ограничить число, которое мне нужно в поле местоположения, из-за текущей структуры циклов for.Я просто не могу придумать хорошую стратегию для этого.Пожалуйста, оставляйте только конструктивные комментарии, так как меня интересует только изучение или выполнение этой задачи.Спасибо за чтение!

1 Ответ

3 голосов
/ 07 февраля 2012

Прежде всего, вам нужно позаботиться об окончаниях строк.Это означает, что ваш код может не зависеть от платформы, если вы просто отметите «\ n» в своем CSV-файле.

Если я получу то, что вы пытаетесь сделать, вам придется установить rowData вдля цикла.Итак, что бы я сделал тогда:

rowOfData.clear();
rowData.clear();

if (importedCSV.open(QFile::ReadOnly))
{
    data = importedCSV.readAll();
    rowOfData = data.split("\n");
    importedCSV.close();
}

for (int x = 0; x < rowOfData.size(); x++)
{
    rowData = rowOfData.at(x).split(";");
    for (int y = 0; y < rowData.size(); y++)
    {
        ui->tableWidgetInjectionLocationsExpandedDialog->item(x,y)->setText(rowData[y]);
    }
}

Я думаю, это должно сделать это.С наилучшими пожеланиями.

...