- 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