вопрос по QDataWidgetMapper, я создал свою модель-наследника QAbstractTableModel , привязал к полям данной модели GUI-виджеты (lineEdit, spinBox и прочее ) с помощью QDataWidgetMapper, но значения полей меняются в случае потери фокуса виджета, как сделать чтобы значения полей менялись при изменении значении параметров виджета? Например, spinBox прокручивается, а значение поля модели не меняется, оно изменится в случае, если spinBox потеряет фокус или нажата Enter, что нежелательно. Спасибо.
а вызов метода модели reset() не помогает ?
так и не понял как должно работать, а как - нет
Litkevich Yuriy, предположим на форме висит spinBox, когда мышкой прокручиваете параметры-счетчик, в соответствующем поле модели значение не меняется, а поменяется значение тогла когда spinBox или потеряет фокус (когда tab клавищей перейдете на другой виджет) или нажмете enter. Мне надо, чтобы соответствующее поле в модели менялось при прокручивании spinBox, крутите мышкой - синхронно меняется значение поля в модели, а не в случае потери фокуса или нажатия enter. Такое впечатление что QDataWidgetMapper ждет сигнала editFinished() а не textChanged или valueChanged(int) чтобы изменить параметры полей в модели.
QSpinBox *spinBox = new spinBox(this);
....
model = new TableModel(this);
widgetMapper = new QDataWidgetMapper(this);
widgetMapper->setModel(model);
widgetMapper->addMapping(lineEdit_1, 0);
widgetMapper->addMapping(lineEdit_2, 1);
widgetMapper->addMapping(lineEdit_3, 2);
widgetMapper->addMapping(spinBox, 3);
widgetMapper->toFirst();
Подсуньте вместо спинбокса какого-нибудь посредника, который будет по каждому сигналу от спинбокса слать мапперу editFinished(), ну и значение из спинбокса возвращать.
В конце концов, вы хотите добиться несколько нестандартного (по замыслу авторов) поведения от пары спинбокс-маппер, так реализуйте его своими силами с помощью перегрузки спинбокса, например.
Это чисто общие соображения. Просто именно с изменением поведения спинбокса уже приходилось иметь дело.
Я немного по другому сделал, с использованием QSignalMapper, соединил сигналы textChanged() и valueChanged() со всех виджетов с одним слотом, который вызывает функцию обновления модели submit, но почему то заработало только тогда, когда я в функции добавления виджета addMapping указал свойства "value" и "text", хотя во всех примерах свойства не используются и прекрасно работают, ну и ладно. Теперь очередная проблема как заставить QDataWidgetMapper обновлять содержимое виджетов по изменению содержимого модели?
Я поглядела на функцию addMapping().
Там, насколько я поняла после беглого взгляда, маппер пользуется eventFilter() от делегата QItemDelegat. может, стоит делегата перегрузить, а не спинБокс..
Гость_Гость_asket_*_*,
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)