1

私は学生プログラマーで、仕事用の GUI インターフェイスを開発するために 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 内の次の項目を参照する方法がわからないことです。1 つの場所をインクリメントする必要がありますが、int++ を使用することはできません。これは、存在しない QStringList 内の項目を最終的に検索し、セグメンテーション違反を引き起こすためです。現在の for ループ構造のため、ここで場所フィールドに必要な数を制限するために for ループを使用することもできません。これにアプローチするための良い戦略が思い浮かびません。私はこのタスクの学習または達成にのみ関心があるため、建設的なコメントのみを残してください。読んでくれてありがとう!

4

1 に答える 1

4

まず、行末を処理する必要があります。これは、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]);
    }
}

これでいけると思います。よろしくお願いします。

于 2012-02-06T20:31:42.470 に答える