CSV data format ( Comma-Separated Values ) format is the simplest representation of tabular data. This format is supported by Excel and many other office suites. For example, I often encounter this format when uploading statistics do the site of the panel webmasters Google Search Console.
In this format, the table represents the data sequence, separated by commas, and represent the column and row are separated by a newline. In the case of the Russian-language Microsoft Excel data separated by semicolons and will be as follows:
BMW;X5;3000000 Lada;Kalina;250000
Parsing CSV
So the whole problem is reduced to a line reading data from a file and uploads the data model of data presentation, which will be placed in QTableView .
Let us take as a basis the above example, the contents of a CSV file that was created in Microsoft Excel:
And display it in QTableView via QStandardItemModel:
mainwindow.h
The appearance of the application was created in the Graphics Designer, so to QTableView appeal goes through the ui object.
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QStandardItemModel> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui; QStandardItemModel *csvModel; }; #endif // MAINWINDOW_H
mainwindow.cpp
CSV file in this example is placed in the project's resource file, if you want to specify a file, respectively, need to rewrite the path to this file. The result will be in accordance with what was shown in the screenshot above.
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QFile> #include <QTextStream> #include <QDebug> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // Create a data model for the mapping table from a CSV file csvModel = new QStandardItemModel(this); csvModel->setColumnCount(3); csvModel->setHorizontalHeaderLabels(QStringList() << "Марка" << "Модель" << "Цена"); ui->tableView->setModel(csvModel); // Open the file from the resources. Instead of the file // Need to specify the path to your desired file QFile file(":/exampleTable.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(); } } MainWindow::~MainWindow() { delete ui; delete csvModel; }
Download the archive with an example csv and QStandardItemModel
https://evileg.com/en/post/158/
Also, I would like to get a list of specific column with its items to use it for another function. How can I retrieve it?
А если мне надо данными из файла подписать оси x и y и построить график как это сделать?
Считайте данные из файла и постройте график, например с помощью библиотеки QCustomPlot