- 1. Разбор CSV
Формат данных CSV ( Comma-Separated Values — значения, разделённые запятыми), является простейшим форматом представления табличных данных. Данный формат поддерживается Excel и многими другими офисными пакетами. Например, я часто сталкиваюсь с данным форматом, когда делаю выгрузку статистики по сайту из панели вебмастера Google Search Console.
В данном формате таблица представляется последовательностью данных, которые разделены запятыми, и представляют собой колонки, а строки разделяются переводом строки. В случае с русифицированным Microsoft Excel данные разделяются точкой с запятой и будут выглядеть следующим образом:
- BMW;X5;3000000
- Lada;Kalina;250000
Разбор CSV
Таким образом вся задача сводится к построчному считыванию данных из файла и добавления этих данных модель представления данных, которая будет помещена в QTableView .
Возьмём за основу выше приведённый пример содержимого CSV файла, который был создан в Microsoft Excel:
И отобразим его в QTableView через QStandardItemModel:
mainwindow.h
Внешний вид приложения был создан в графическом дизайнере, поэтому к QTableView обращение идёт через объект ui.
- #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; // Объявим указатель на модель данных, которая
- // будет содержать данные из CSV файла
- };
- #endif // MAINWINDOW_H
mainwindow.cpp
Файл CSV в данном примере помещён в файл ресурсов проекта, если Вам требуется указать иной файл, то соответственно потребуется переписать путь к данном файлу. Результат будет соответствовать тому, что показан был на скриншоте выше.
- #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);
- // Создаём модель данных для отображения таблицы из CSV файла
- csvModel = new QStandardItemModel(this);
- csvModel->setColumnCount(3);
- csvModel->setHorizontalHeaderLabels(QStringList() << "Марка" << "Модель" << "Цена");
- ui->tableView->setModel(csvModel); // Устанавливаем модель в таблицу
- // Открываем файл из ресурсов. Вместо данного файла
- // необходимо указывать путь к вашему требуемому файлу
- QFile file(":/exampleTable.csv");
- if ( !file.open(QFile::ReadOnly | QFile::Text) ) {
- qDebug() << "File not exists";
- } else {
- // Создаём поток для извлечения данных из файла
- QTextStream in(&file);
- // Считываем данные до конца файла
- while (!in.atEnd())
- {
- // ... построчно
- QString line = in.readLine();
- // Добавляем в модель по строке с элементами
- QList<QStandardItem *> standardItemsList;
- // учитываем, что строка разделяется точкой с запятой на колонки
- for (QString item : line.split(";")) {
- standardItemsList.append(new QStandardItem(item));
- }
- csvModel->insertRow(csvModel->rowCount(), standardItemsList);
- }
- file.close();
- }
- }
- MainWindow::~MainWindow()
- {
- delete ui;
- delete csvModel;
- }
Скачать архив с примером csv и 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