Значения QDataWidgetMapper и QDateEdit

У меня есть QSqlTableModel с какой-то таблицей, допустим, это

model->setTable("Person");

А также у меня есть QDataWidgetMapper, который сопоставляет некоторые виджеты (lineedits и т. д.) с соответствующими столбцами в модели.
Итак, проблема в элементе QDateEdit.

mapper->addMapping(birthEdit, Person_Birthdate);

Когда я меняю дату в birthEdit (QDateEdit), значения фактически не изменяются в соответствующей таблице, потому что они хранятся в другом формате, и я также получаю сообщение об ошибке:

"QODBCResult::exec: unable to bind variable: "[Microsoft][ODBC SQL Server Driver]...".

Дата в базе данных хранится в формате "гггг-ММ-дд", а QDateEdit возвращает дату в другом (я полагаю). Насколько я знаю, QDataWidgetMapper использует свойство USER в отображаемом виджете для получения/установки значения.

Как я могу решить свою проблему?


person Daniel    schedule 05.01.2014    source источник


Ответы (1)


У вас есть два подхода, которые следует использовать в соответствии с следующей страницей:

  • Подкласс QSqlRelationalDelegate и внесите соответствующие изменения в методы setEditorData и setModelData.

  • Расширьте QDateEdit и заставьте его обрабатывать данные метки времени и преобразовывать в объект QDate.

person lpapp    schedule 06.01.2014
comment
следующая страница пуста и вообще не содержит никакой информации. Я попробовал первый способ - подкласс QSqlRelationaDelegate и т. д., и это помогло, спасибо. Не могли бы вы объяснить, что вы имеете в виду, расширить QDateEdit и заставить его обрабатывать данные временной метки и преобразовывать в объект QDate? - person Daniel; 06.01.2014
comment
@ScienceSE: ах, ты прав. На моей стороне была ошибка копирования/вставки, хе-хе. Теперь это исправлено, и вы также можете получить больше объяснений о втором решении. - person lpapp; 06.01.2014
comment
Спасибо. Но я думаю, что пример в статье неполный из-за сигнала NOTIFY dateChanged, который автор забыл добавить в свой класс :) В общем, я понял общую идею. - person Daniel; 06.01.2014