crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> как обнулить виджеты QDataWidgetMapper, когда модель отфильтровала 0 записей
Steklova Olga
  опции профиля:
сообщение 27.9.2011, 21:38
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

Спасибо сказали: 5 раз(а)




Репутация:   4  


Здравствуйте! Работаю с Qt 4.7, Firebird 2.1.
Подскажите, пожалуйста, новичку в Qt, как обнулить виджеты QDataWidgetMapper, когда фильтр модели изменился и модель QSqlTableModel отфильтровала 0 записей?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Steklova Olga
  опции профиля:
сообщение 28.12.2011, 14:36
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 198
Регистрация: 27.9.2011
Из: Санкт-Петербург
Пользователь №: 2912

Спасибо сказали: 5 раз(а)




Репутация:   4  


В результате для моей программы понадобились оба найденных варианта:
и использование слота setCurrentModelIndex mapper'а, и обнуление виджетов mapper'а вручную. И вот почему.
У меня есть:
- model_parent с записями из главной таблицы (PK = F_ID),
- model_child с записями из дочерней таблицы (FK = F_TO_ID),
- view_parent (для модели model_parent) для отображения основных полей главной таблицы для всех ID (перемещаясь по нему, выбираем текущий ID),
- mapper_parent (для модели model_parent) для отображения остальных полей главной таблицы для текущего ID,
- mapper_child (для модели model_child) для отображения полей дочерней таблицы для текущего ID.
На модель model_parent накладываются различные фильтры, в результате чего она может отфильтровать 0 записей.

Решение:
    //для обновления mapper_parent 
    connect(view_parent->selectionModel(),
            SIGNAL(currentRowChanged(const QModelIndex &, const QModelIndex &)),
            mapper_parent, SLOT(setCurrentModelIndex(const QModelIndex &)));

    //для обновления mapper_child делаем по-другому,
    //потому что для mapper_child установлена не такая же модель, как для view_parent
    connect(view_parent->selectionModel(),
            SIGNAL(currentRowChanged(const QModelIndex &, const QModelIndex &)),
            this, SLOT(update_mapper_child()));
А в слоте update_mapper_child обнуляем виджеты mapper_child вручную,
если view_parent->currentIndex() стал невалидным (то есть, если в модели model_parent отфильтровалось 0 записей).

Сообщение отредактировал Steklova Olga - 28.12.2011, 14:37
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 27.11.2024, 10:17