как обнулить виджеты QDataWidgetMapper, когда модель отфильтровала 0 записей |
Здравствуйте, гость ( Вход | Регистрация )
как обнулить виджеты 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.9.2011, 10:51
Сообщение
#2
|
Участник Группа: Участник Сообщений: 198 Регистрация: 27.9.2011 Из: Санкт-Петербург Пользователь №: 2912 Спасибо сказали: 5 раз(а) Репутация: 4 |
|
|
|
ViGOur |
28.9.2011, 12:50
Сообщение
#3
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
|
|
|
Steklova Olga |
28.9.2011, 13:36
Сообщение
#4
|
Участник Группа: Участник Сообщений: 198 Регистрация: 27.9.2011 Из: Санкт-Петербург Пользователь №: 2912 Спасибо сказали: 5 раз(а) Репутация: 4 |
1. Заглянула в qdatawidgetmapper.cpp,
поняла, что mapper->setCurrentIndex(-1) и не должен работать. 2. Пока что, решила вручную обнулить виджеты:
3. Цитата void QDataWidgetMapper::clearMapping () Этот вариант не работает, как мне надо, так как текст в виджетах mapper'а при этом не обнуляется. Мне кажется, что clearMapping только удаляет связь между mapper и виджетами lineEdit_i, а мне эту связь терять не надо, просто фильтр у меня выдает либо 0 записей, либо > 0. 4. Кто-нибудь знает другой вариант? |
|
|
Steklova Olga |
25.10.2011, 16:23
Сообщение
#5
|
Участник Группа: Участник Сообщений: 198 Регистрация: 27.9.2011 Из: Санкт-Петербург Пользователь №: 2912 Спасибо сказали: 5 раз(а) Репутация: 4 |
Решение найдено
Update mapper'а легко сделать, используя слот setCurrentModelIndex mapper'а:
Если в модели установлен фильтр, то независимо от того, сколько отфильтровалось записей, mapper обновится правильно (если 0 записей, то виджеты mapper'а обнулятся). |
|
|
Steklova Olga |
28.12.2011, 14:36
Сообщение
#6
|
Участник Группа: Участник Сообщений: 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 записей. Решение: А в слоте update_mapper_child обнуляем виджеты mapper_child вручную, если view_parent->currentIndex() стал невалидным (то есть, если в модели model_parent отфильтровалось 0 записей). Сообщение отредактировал Steklova Olga - 28.12.2011, 14:37 |
|
|
Текстовая версия | Сейчас: 23.11.2024, 11:47 |