Как получить все элементы в столбце, используя QList? - PullRequest
1 голос
/ 05 июля 2019

Мне нужно построить график из CSV-файла.Я использовал QList для этого.Мне нужно получить все элементы в определенном столбце, например, элементы в столбце 4. Это мой метод для анализа файла CSV и записи в таблицу.Мне нужен метод, чтобы получить каждый 4-й элемент строки.

        csvModel = new QStandardItemModel(this);
        csvModel->setColumnCount(17);
        csvModel->setHorizontalHeaderLabels(QStringList() << "TEAM ID" << "MISSION TIME" << "PACKET COUNT" << "ALTITUDE" <<"PRESSURE" <<"TEMPERATURE" <<"VOLTAGE" <<"GPS TIME" <<"GPS LATITUDE" <<"GPS LONGITUDE" <<"GPS ALTITUDE" <<"GPS SATS" <<"PITCH" <<"ROLL" <<"BLADE SPIN RATE" <<"SOFTWARE STATE" <<"BONUS DIRECTION");
        ui->csvTableView->setModel(csvModel);

        // Open the file from the resources. Instead of the file
        // Need to specify the path to your desired file
        QFile file("C:/Users/HP/Desktop/test.csv");

        if ( !file.open(QFile::ReadOnly | QFile::Text) ) {
            qDebug() << "File not exists";
        }

        else {
            // Create a thread to retrieve data from a file
            QTextStream in(&file);
            //Reads the data up to the end of file
            while (!in.atEnd())
            {

                QString line = in.readLine();
                // Adding to the model in line with the elements
                QList<QStandardItem *> standardItemsList;
                // consider that the line separated by semicolons into columns
                for (QString item : line.split(",")) {
                    standardItemsList.append(new QStandardItem(item));
                }
                csvModel->insertRow(csvModel->rowCount(), standardItemsList);
            }
            file.close();
        }

1 Ответ

2 голосов
/ 05 июля 2019

Вы можете получить их таким образом.

QList<QStandardItem*> column;
for (auto row = 0; row < csvModel->rowCount(); row++) {
    column << csvModel->data(csvModel->index(row, 3)).value<QStandardItem*>();
}

В противном случае, если вы хотите полностью удалить столбец из модели и получить все эти элементы, которые вы можете использовать QStandardItemModel :: takeColumn , помните после вызова этого, что вы должны управлять этими указателями, поскольку QStandardItemModel освобождает владельца.

Тогда, если вы хотите получить доступ к данным каждого элемента, вы можете сделать это.

for (int i=0; i<column.size (); i++) {
    series->append(i, column.at(i).data().toInt());
}

Чтобы быть более эффективным, вы можете сделать все это за один цикл.

QList<int> series;
for (auto row = 0; row < csvModel->rowCount(); row++) {
    auto item = csvModel->data(csvModel->index(row, 3)).value<QStandardItem*>();
    series << item.data().toInt();
}
...