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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Отключение ленивой загрузки в QSqlRelationalTableModel  (Прочитано 3093 раз)
Хаски
Гость
« : Октябрь 18, 2012, 18:08 »

Здравствуйте!
Я создаю модель, связанную с таблицей в БД на SQlite и вывожу ее в tableView:
Код:
QSqlRelationalTableModel *model=new QSqlRelationalTableModel;
    model->setTable("publications");
    model->setRelation(6, QSqlRelation("pub_types", "id", "type"));
    model->setEditStrategy(QSqlTableModel::OnFieldChange);
    model->select();
    while(model->canFetchMore())
            model->fetchMore();
    ui->tableView_pub->setModel(model);
    ui->tableView_pub->setFocus();
    ui->tableView_pub->selectRow(model->rowCount()-1);

Класс QSqlRelationalTableModel реализован так, что имеет место так называемая "ленивая загрузка" данных. При работе с таблицей подгружается по 255 записей, остальные - по мере прокрутки ползунка. Мне это не нужно, мне нужно, чтобы загружались сразу все данные (память позволяет, объем базы не слишком велик, а вызванные этим неудобства интерфейса мешают).
Во всех методах своего приложения я использую код "while(model->canFetchMore()) model->fetchMore();", и все работает так, как надо - в tableView загружается все содержимое таблицы из БД.
Однако, мне также необходима возможность редактирования ячеек в tableView с синхронизацией с БД (стратегия редактирования - OnFieldChange). При этом, когда пользователь редактирует ячейку из ряда с номером больше 255, после завершения ее редактирования таблица перезагружается из БД, и вновь лишь первые 255 строк. В результате tableview перескакивает к 255 строке, что очень неудобно. Например, если мне нужно быстро отредактировать несколько строк в таблице под номерами 500, 501, 502, у каждой по несколько полей, это не получится сделать быстро и удобно из-за постоянного перескакивания на 255 строку.
Вопрос: как мне изменить поведение tableview, чтобы после заверешения редактирования ячейки в таблице загружалась вся таблица? Или как изменить этот параметр, дающий ограничение в 255 строк?
« Последнее редактирование: Октябрь 18, 2012, 18:10 от Хаски » Записан
kataklysm
Гость
« Ответ #1 : Октябрь 21, 2012, 17:38 »

Здравствуйте!
Я создаю модель, связанную с таблицей в БД на SQlite и вывожу ее в tableView:
Код:
QSqlRelationalTableModel *model=new QSqlRelationalTableModel;
    model->setTable("publications");
    model->setRelation(6, QSqlRelation("pub_types", "id", "type"));
    model->setEditStrategy(QSqlTableModel::OnFieldChange);
    model->select();
    while(model->canFetchMore())
            model->fetchMore();
    ui->tableView_pub->setModel(model);
    ui->tableView_pub->setFocus();
    ui->tableView_pub->selectRow(model->rowCount()-1);

Класс QSqlRelationalTableModel реализован так, что имеет место так называемая "ленивая загрузка" данных. При работе с таблицей подгружается по 255 записей, остальные - по мере прокрутки ползунка. Мне это не нужно, мне нужно, чтобы загружались сразу все данные (память позволяет, объем базы не слишком велик, а вызванные этим неудобства интерфейса мешают).
Во всех методах своего приложения я использую код "while(model->canFetchMore()) model->fetchMore();", и все работает так, как надо - в tableView загружается все содержимое таблицы из БД.
Однако, мне также необходима возможность редактирования ячеек в tableView с синхронизацией с БД (стратегия редактирования - OnFieldChange). При этом, когда пользователь редактирует ячейку из ряда с номером больше 255, после завершения ее редактирования таблица перезагружается из БД, и вновь лишь первые 255 строк. В результате tableview перескакивает к 255 строке, что очень неудобно. Например, если мне нужно быстро отредактировать несколько строк в таблице под номерами 500, 501, 502, у каждой по несколько полей, это не получится сделать быстро и удобно из-за постоянного перескакивания на 255 строку.
Вопрос: как мне изменить поведение tableview, чтобы после заверешения редактирования ячейки в таблице загружалась вся таблица? Или как изменить этот параметр, дающий ограничение в 255 строк?
Использовать QAbstractItemModel or QAbstractTableModel
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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