Russian Qt Forum
Ноябрь 24, 2024, 06:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как перебрать все строки таблиц и сложить?  (Прочитано 6494 раз)
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
Спасибо
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Август 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 принимает номер строки и возвращает ее содержимое, а value -- принимает индекс столбца или его имя в таблице бд
« Последнее редактирование: Август 07, 2015, 21:06 от gil9red » Записан

artb1sh
Гость
« Ответ #2 : Август 07, 2015, 20:55 »

QSqlTableModel *model=new QSqlTableModel;
model->setTable("catalog");
Записан
PimenS
Крякер
****
Offline Offline

Сообщений: 371


Просмотр профиля
« Ответ #3 : Август 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)
Записан
Hrundel
Гость
« Ответ #4 : Август 08, 2015, 09:32 »

Ты же таблице назначаешь свою модель. Модель принимает данные и их хранит.
Значит напрямую внутри модели считай, без обращения к представлению. Для этого Interview и было разработано, чтобы мухи были отдельно, а котлеты отдельно.
Внутри модели у тебя есть какая-то структура данных. Напиши метод возвращающий сумму прямо из модели.
Записан
artb1sh
Гость
« Ответ #5 : Август 11, 2015, 13:55 »

А нельзя в последней таблице использовать данные не QSqlTableModel, а QSqlQueryModel?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #6 : Август 11, 2015, 16:22 »

А нельзя в последней таблице использовать данные не QSqlTableModel, а QSqlQueryModel?

А какая разница? QSqlTableModel наследуется от QSqlQueryModel  Улыбающийся
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.054 секунд. Запросов: 22.