如何将CSV文件导入QTableWidget

时间:2012-02-06 18:26:49

标签: c++ qt loops csv qtablewidget

我是学生程序员,我正在使用Qt开发工作的GUI界面,我很难弄清楚如何使这个导入功能工作。如果你愿意的话,一些程序员编写器会阻塞。到目前为止我的代码是:

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 个答案:

答案 0 :(得分:3)

首先,您需要处理行结尾。 这意味着如果您只是在CSV文件中检查“\ n”,那么您的代码可能与平台无关。

如果我得到你要做的事情,你必须在for循环中设置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]);
    }
}

我想应该这样做。 最好的问候。