Название: Как перебрать все строки таблиц и сложить? Отправлено: artb1sh от Август 07, 2015, 20:28 Привет tt мира:
как перебрать в QTableView все строки в таблицах и записать значения в результирующею таблицу? Объяснение: mytable: ........col1 col2 ......col3 lin1.....4......5..........-1 lin2.....3......5..........-2 lin3.....2......1..........1 lin4.....4......3..........1 Я хочу, отобразить разницу в таблице col3 по колонкам col1 и col2. lin1(col1)-lin1(col2)=lin1(col3) lin2(col1)-lin2(col2)=lin2(col3) 4-5=-1 3-5=-2 Спасибо Название: Re: Как перебрать все строки таблиц и сложить? Отправлено: gil9red от Август 07, 2015, 20:52 QTableView? А какую модель используете?
UPD. Считаем, что ваша таблица уже имеет 3 колонки и заполнена, и то, что моделью будет QStandardItemModel // Создаете цикл для перебора строк таблицы: for (int row = 0; row < model.rowCount(); row++) { QStandardItem * item1 = model.item(row, 0); QStandardItem * item2 = model.item(row, 1); QStandardItem * item3 = model.item(row, 2); int result = item1->text().toInt() - item2->text().toInt(); item3->setText(QString("%1").arg(result)); } UPD2. Алгоритм-то все равно такой :) Вот пример получения записей в таблице: QSqlQueryModel model; model.setQuery("SELECT * FROM employee"); int salary = model.record(4).value("salary").toInt(); В которой record (http://doc.qt.io/qt-4.8/qsqlquerymodel.html#record)принимает номер строки и возвращает ее содержимое, а value (http://doc.qt.io/qt-4.8/qsqlrecord.html#value)-- принимает индекс столбца или его имя в таблице бд Название: Re: Как перебрать все строки таблиц и сложить? Отправлено: artb1sh от Август 07, 2015, 20:55 QSqlTableModel *model=new QSqlTableModel;
model->setTable("catalog"); Название: Re: Как перебрать все строки таблиц и сложить? Отправлено: PimenS от Август 07, 2015, 22:02 Проще использовать для такого расчета сам сервер SQL.
Если данные получают из базы, не редактируя QTableView. Вариант 1. Создать представление и загружать в модель уже готовые данные. Вариант 2. Использовать не QSqlTableModel, а например QSqlQueryModel и соответственно запрос типа: Код: SELECT col1, col2, col1+col2 AS col3 FROM catalog Если нужно редактировать, то лучше использовать свою модель и переопределить bool QAbstractItemModel::setData(const QModelIndex & index, const QVariant & value, int role = Qt::EditRole) Название: Re: Как перебрать все строки таблиц и сложить? Отправлено: Hrundel от Август 08, 2015, 09:32 Ты же таблице назначаешь свою модель. Модель принимает данные и их хранит.
Значит напрямую внутри модели считай, без обращения к представлению. Для этого Interview и было разработано, чтобы мухи были отдельно, а котлеты отдельно. Внутри модели у тебя есть какая-то структура данных. Напиши метод возвращающий сумму прямо из модели. Название: Re: Как перебрать все строки таблиц и сложить? Отправлено: artb1sh от Август 11, 2015, 13:55 А нельзя в последней таблице использовать данные не QSqlTableModel, а QSqlQueryModel?
Название: Re: Как перебрать все строки таблиц и сложить? Отправлено: gil9red от Август 11, 2015, 16:22 А нельзя в последней таблице использовать данные не QSqlTableModel, а QSqlQueryModel? А какая разница? QSqlTableModel наследуется от QSqlQueryModel :) |