вопрос по QDataWidgetMapper |
Здравствуйте, гость ( Вход | Регистрация )
вопрос по QDataWidgetMapper |
Гость_Гость_asket_*_* |
31.5.2013, 8:25
Сообщение
#1
|
Гости |
вопрос по QDataWidgetMapper, я создал свою модель-наследника QAbstractTableModel , привязал к полям данной модели GUI-виджеты (lineEdit, spinBox и прочее ) с помощью QDataWidgetMapper, но значения полей меняются в случае потери фокуса виджета, как сделать чтобы значения полей менялись при изменении значении параметров виджета? Например, spinBox прокручивается, а значение поля модели не меняется, оно изменится в случае, если spinBox потеряет фокус или нажата Enter, что нежелательно. Спасибо.
|
|
|
Алексей1153 |
31.5.2013, 17:21
Сообщение
#2
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
а вызов метода модели reset() не помогает ?
|
|
|
Litkevich Yuriy |
31.5.2013, 19:09
Сообщение
#3
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
так и не понял как должно работать, а как - нет
|
|
|
asket |
3.6.2013, 8:28
Сообщение
#4
|
Студент Группа: Новичок Сообщений: 15 Регистрация: 18.1.2012 Пользователь №: 3139 Спасибо сказали: 0 раз(а) Репутация: 0 |
Litkevich Yuriy, предположим на форме висит spinBox, когда мышкой прокручиваете параметры-счетчик, в соответствующем поле модели значение не меняется, а поменяется значение тогла когда spinBox или потеряет фокус (когда tab клавищей перейдете на другой виджет) или нажмете enter. Мне надо, чтобы соответствующее поле в модели менялось при прокручивании spinBox, крутите мышкой - синхронно меняется значение поля в модели, а не в случае потери фокуса или нажатия enter. Такое впечатление что QDataWidgetMapper ждет сигнала editFinished() а не textChanged или valueChanged(int) чтобы изменить параметры полей в модели.
Алексей1153, reset() вызывается в самом модели и является protected-функцией, модель работает, синхронизировал с TreeView проблем нет. |
|
|
Анна |
3.6.2013, 12:35
Сообщение
#5
|
Активный участник Группа: Участник Сообщений: 276 Регистрация: 22.5.2008 Из: Зеленоград Пользователь №: 181 Спасибо сказали: 30 раз(а) Репутация: 4 |
Подсуньте вместо спинбокса какого-нибудь посредника, который будет по каждому сигналу от спинбокса слать мапперу editFinished(), ну и значение из спинбокса возвращать.
В конце концов, вы хотите добиться несколько нестандартного (по замыслу авторов) поведения от пары спинбокс-маппер, так реализуйте его своими силами с помощью перегрузки спинбокса, например. Это чисто общие соображения. Просто именно с изменением поведения спинбокса уже приходилось иметь дело. |
|
|
asket |
5.6.2013, 9:47
Сообщение
#6
|
Студент Группа: Новичок Сообщений: 15 Регистрация: 18.1.2012 Пользователь №: 3139 Спасибо сказали: 0 раз(а) Репутация: 0 |
Я немного по другому сделал, с использованием QSignalMapper, соединил сигналы textChanged() и valueChanged() со всех виджетов с одним слотом, который вызывает функцию обновления модели submit, но почему то заработало только тогда, когда я в функции добавления виджета addMapping указал свойства "value" и "text", хотя во всех примерах свойства не используются и прекрасно работают, ну и ладно. Теперь очередная проблема как заставить QDataWidgetMapper обновлять содержимое виджетов по изменению содержимого модели?
|
|
|
Анна |
5.6.2013, 14:52
Сообщение
#7
|
Активный участник Группа: Участник Сообщений: 276 Регистрация: 22.5.2008 Из: Зеленоград Пользователь №: 181 Спасибо сказали: 30 раз(а) Репутация: 4 |
Я поглядела на функцию addMapping().
Там, насколько я поняла после беглого взгляда, маппер пользуется eventFilter() от делегата QItemDelegat. может, стоит делегата перегрузить, а не спинБокс.. Гость_Гость_asket_*_*, создал свою модель-наследника QAbstractTableModel Теперь очередная проблема как заставить QDataWidgetMapper обновлять содержимое виджетов по изменению содержимого модели? Ну, наверное, ваша модель должна где-то посылать сигнал dataChanged ( const QModelIndex & topLeft, const QModelIndex & bottomRight ), и , скорей всего, это "где-то" функция setData() у модели. Я бы начала исследования этого вопроса с исходника QDataWidgetMapper, конкретно - функции setModel(). ... и там, действительно происходит connect(model, SIGNAL(dataChanged ...),...); Сообщение отредактировал Анна - 5.6.2013, 16:03 |
|
|
Текстовая версия | Сейчас: 29.11.2024, 7:10 |