如何使用QList<QStandardItem *>获取列中的所有项目?

How to get all items in a column using QList<QStandardItem *>?

本文关键字:项目 gt QList 何使用 lt QStandardItem 获取      更新时间:2023-10-16

我需要从CSV文件绘制图形。我为此使用了Qlist。我需要在特定列中获取所有项目,例如第4列中的项目。这是我解析CSV文件并写入表中的方法。我需要一种方法来获取行的每四个元素。

        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();
        }

您应该能够这样获得它们。

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();
}