Добрый день!
Да, существует способ упрощения работы с таблицами в вашем приложении на QWidget с помощью моделей, которые уже реализуют некоторые функции для работы с данными. Одна из возможностей — использовать `QStandardItemModel`, который предоставляет стандартные реализации таблицы и требует меньше кода.
Вот пример, как можно использовать `QStandardItemModel` для отображения и редактирования данных из `QList`:
```cpp
#include <QApplication>
#include <QTableView>
#include <QStandardItemModel>
#include <QHeaderView>
#include <QString>
#include <QList>
struct Data {
QString name;
double value;
int count;
};
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// Ваши данные
QList<Data> dataList = {
{"Item 1", 10.5, 2},
{"Item 2", 20.1, 5},
{"Item 3", 15.0, 3}
};
// Создание модели
QStandardItemModel model(dataList.size(), 3);
model.setHeaderData(0, Qt::Horizontal, "Name");
model.setHeaderData(1, Qt::Horizontal, "Value");
model.setHeaderData(2, Qt::Horizontal, "Count");
// Заполнение модели данными
for (int row = 0; row < dataList.size(); ++row) {
model.setItem(row, 0, new QStandardItem(dataList[row].name));
model.setItem(row, 1, new QStandardItem(QString::number(dataList[row].value)));
model.setItem(row, 2, new QStandardItem(QString::number(dataList[row].count)));
}
// Настройка таблицы
QTableView tableView;
tableView.setModel(&model);
tableView.horizontalHeader()->setStretchLastSection(true);
tableView.resize(400, 300);
tableView.setWindowTitle("Editable Table");
// Запуск приложения
tableView.show();
return app.exec();
}
```
В этом коде мы используем `QStandardItemModel`, чтобы создать модель и заполнить ее данными из `QList<Data>`. Мы также устанавливаем заголовки для колонок. В таблице `QTableView` пользователи смогут редактировать значения непосредственно в ячейках.
Преимущества данного подхода:
1. Меньше кода по сравнению с реализацией `QAbstractTableModel`.
2. Быстрая настройка и изменение данных.
3. Встроенная поддержка редактирования ячеек.
Если необходима больший контроль или работа с более сложными структурами данных, тогда стоит рассмотреть создание своей модели, но для простых случаев `QStandardItemModel` будет достаточно.