Существует множество способов вывести табличные данные. Один из таких способов (и на мой взгляд наиболее правильный) выводить данные в QTableView. Для данного виджета существует специальная модель данных QAbstractTableModel. На её базе мы и сделаем пример.
Как всегда, вначале создадим Gui приложение Qt, всё как обычно.
Далее мы создадим нашу модель данных на базе QAbstractTableModel:
Как всегда, вначале создадим Gui приложение Qt, всё как обычно.
Далее мы создадим нашу модель данных на базе QAbstractTableModel:
Для
простого отображения данных нам
необходимо переопределить 3 метода.
Сразу объявим их в mytablemodel.h :
private: int rowCount(const QModelIndex &parent) const; int columnCount(const QModelIndex &parent) const; QVariant data(const QModelIndex &index, int role) const;
Соответственно
нам необходимо написать определение
всех 3-х функций. Я сделаю максимально
упрощенно, дабы не нагромождать код
возможными структурами данных. Вы же
можете использовать QList, QVector, или что
вашей душе угодно :).
Для
методов rowCount
и columnCount я
сделал всё предельно просто:
int myTableModel::rowCount(const QModelIndex &parent) const { return 5; // сделаем фиксированно 5 строк в таблице //если вы станете использовать скажем QList, то пишите return list.size(); } int myTableModel::columnCount(const QModelIndex &parent) const { return 4; // количество колонок сделаем также фиксированным } Последний метод возвращает необходимые данные объектом класса QVariant (не забудьте подключить его в заголовочном файле):
QVariant myTableModel::data(const QModelIndex &index, int role) const
{
if (role == Qt::DisplayRole) { QString unswer = QString("row = ") + QString::number(index.row()) + " col = " + QString::number(index.column()); // строкой выше мы формируем ответ. QString::number преобразует число в текст return QVariant(unswer); } return QVariant(); }
Теперь
осталось дело за малым: создать экземпляр
класса и установить его в качестве
модели для QTableView.
-
Добавьте на форме mainwindow.ui виджет
QTableView.
- В
mainwindow.h подключите наш класс:
#include "mytablemodel.h"
- Ну
и последнее, создайте и установите
экземпляр класса в конструкторе
mainwindow:
myTableModel *myModel = new myTableModel(); ui->tableView->setModel(myModel);
После
запуска получим таблицу с данными:
Спасибо, Сергей, то, что нужно.
ОтветитьУдалитьТо что надо без лишней воды.
ОтветитьУдалить