Evgenii Legotckoi
Evgenii LegotckoiAug. 28, 2016, 11:08 a.m.

Qt/C++ - Lesson 054. Reading data from a CSV file, and their representation via QStandardItemModel

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

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Do you like it? Share on social networks!

  • July 5, 2019, 9:04 a.m.

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?

TF
  • July 20, 2021, 1:21 p.m.

А если мне надо данными из файла подписать оси x и y и построить график как это сделать?

Evgenii Legotckoi
  • Oct. 11, 2021, 1:26 a.m.

Считайте данные из файла и постройте график, например с помощью библиотеки QCustomPlot

Comments

Only authorized users can post comments.
Please, Log in or Sign up
E

C++ - Test 002. Constants

  • Result:41points,
  • Rating points-8
E

C++ - Test 001. The first program and data types

  • Result:80points,
  • Rating points4
E

C++ - Test 001. The first program and data types

  • Result:53points,
  • Rating points-4
Last comments
Evgenii Legotckoi
Evgenii LegotckoiDec. 3, 2023, 4:39 p.m.
Django - Lesson 059. Saving the selected language in user settings It is redirect from untranslated url to translated url. It is normal behavior for mutlilanguage web site based on the Django.
c
coder55Dec. 2, 2023, 1:34 a.m.
Django - Lesson 059. Saving the selected language in user settings It tries to do language translation in API views. That's why it sends or receives the same API request twice. Do you have any suggestions on this? Example: stripe webhook. "GET /warehouse/…
g
gr1047Nov. 12, 2023, 6:35 p.m.
Qt/C++ - Lesson 035. Downloading files via HTTP with QNetworkAccessManager Добрый день. Изучаю Qt на ваших уроках. Всё нормально работает на Linux. А под Win один раз запустилось, а сейчас вместо данных сайта получается ошибк "Unable to write". Куда копать, ума не…
D
DamirNov. 2, 2023, 10:41 a.m.
Qt/C++ - Lesson 056. Connecting the Boost library in Qt for MinGW and MSVC compilers С CMake всё на много проще: find_package(Boost)
Павел Дорофеев
Павел ДорофеевOct. 28, 2023, 9:48 p.m.
Как написать свой QTableView Итак начинаем писать свои виджеты на основе QAbstractItemView. А что так можно было?
Now discuss on the forum
BlinCT
BlinCTNov. 30, 2023, 5:18 p.m.
Сборка проекта Qt6 из под винды на удаленой машине Всем привет. Сталкнулся с такой странностью: надо собирать проект из под 10 винды на удаленой линуксовой машине, проект строится на QT6, но вот когда cmake генерит свой кеш то вылитает…
Evgenii Legotckoi
Evgenii LegotckoiNov. 19, 2023, 4:14 p.m.
CKEditor 5 и подсветка синтаксиса. Добрый день. Я устал разбираться с CKEditor и просто перешёл на использование самописного markdown редактора...
Виктор Калесников
Виктор КалесниковOct. 20, 2023, 11:29 a.m.
Контакты Android делал в далеком 2017г поэтому особенно ничего не подскажу. Это основные методы получения данных с андроида используя Qt. Там еще какоето колдунство с манифестом. Андроидом давно не занимаюс…
m
mihamuzOct. 18, 2023, 9:03 p.m.
Скачать Qt 6 Сработал следующий алгоритм. Инстолятор скачал используя это https://freevpnplanet.com/ru/ как расширение браузера. Потом установил это https://freevpnplanet.com/ru/ же на ПК и через инстолятор …

Follow us in social networks