我需要从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();
}
答案 0 :(得分:2)
您应该能够像这样得到它们。
QList<QStandardItem*> column;
for (auto row = 0; row < csvModel->rowCount(); row++) {
column << csvModel->data(csvModel->index(row, 3)).value<QStandardItem*>();
}
否则,如果要从模型中完全删除该列并获取所有可以使用的项目QStandardItemModel::takeColumn,请记住在调用此方法后必须管理这些指针,因为QStandardItemModel
释放了所有权。 / p>
然后,如果要访问每个元素数据,则可以这样做。
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();
}