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

标签 c++ qt csv qstandarditemmodel

我需要从 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();
        }

最佳答案

你应该能够像这样得到它们。

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

关于c++ - 如何使用 QList<QStandardItem *> 获取列中的所有项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56903798/

相关文章:

c++ - 打开窗口时应用程序崩溃 qt

python - 使用 pandas 0.13 导入多级索引 csv 数据

java - Java中查找范围

python - 尝试使用 os.path 通过文件搜索创建 CSV 文件

c++ - CMake 和配置/模块 find_package

c++ - 为什么 ferror() 在设备上没有剩余空间时返回 EPERM - 我希望 ENOSPC

c++ - 智能指针可以进行​​切片吗?

C++:从 wstringstream 获取 LPCWSTR?

c++ - Qt:如何将parent设置为其子类的成员变量?

c++ - 如何使用十六进制格式更改容器的背景颜色?