QDataMaper и Битовые поля в CheckBox, Мапинг битовых полей из short в БД |
Здравствуйте, гость ( Вход | Регистрация )
QDataMaper и Битовые поля в CheckBox, Мапинг битовых полей из short в БД |
JohnZ |
8.4.2021, 17:00
Сообщение
#1
|
Участник Группа: Участник Сообщений: 139 Регистрация: 19.7.2014 Пользователь №: 4190 Спасибо сказали: 10 раз(а) Репутация: 0 |
Всем Здравия !
Прошу прощения если не в том разделе спрашиваю, не знаю к какому разделу мой вопрос отнести. Проблема следующая. На данный момент, если на форме н-ное количество битовых полей, которые в БД упакованы в один short/int, то приходится делать следующее: 1. Ложим на эту форму скрытый QSpinBox, который хранит полное значение short/int и связывается с полем БД QDataMaper-ом. 2. Так-же на форме ес-сно присутствуют QCheckBox-ы в н-ном количестве, и ес-сно с разными именами, что-бы их потом можно было отличить из скрипта. 3. При открытии или закрытии формы, соответствующие функции скрипта распаковывают / упаковывают значения из QCheckBox-ов в значение в QSpinBox-е. Каждый контрол на форме имеет свой уникальный Idd (динамические св-ва в QT-дизайнере) , по которому он и мапится в БД. Ес-сно QCheckBox своего Idd не имеет, (на картинке показан для примера), за исключением случая если он один соответствует одному полю short/int в БД. Дык вотЪ, хотелось-бы добавить на форме QCheckBox-у доп. динамическое св-во Bit (см. в прицепе. Скрытый QSpinBox справа в строке битовых полей) и обойтись БЕЗ вызова СКРИПТОВЫХ функций, и соотв-но без НЕОБХОДИМОСТИ их написания для форм с упакованными битовыми полями. Any ideas ? Если нужны куски исходников - выложу, но думаю и так понятно ... Помогите plz кто сталкивался или в курсе. Может уже где-то решалось что-то подобное ?! QT 4.8.6 Удачи ! Сообщение отредактировал JohnZ - 8.4.2021, 17:16 |
|
|
Алексей1153 |
13.4.2021, 17:33
Сообщение
#2
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
JohnZ, нет, я на самом деле не понял ТЗ )) Ты меня переоцениваешь. С классом QDataWidgetMapper ранее не сталкивался, но сейчас в справке почитал, вроде понял, для чего он - вроде как листалка записей из таблицы, при этом поля записи отображаются в нужном виджете на форме.
Позвал телепатов, они предполагают, что проблема именно в том, что значения нескольких QCheckBox-ов упакованы в ОДИН uint32 то есть, вместо нескольких полей в БД, как это было бы правильно, используется одно поле, в котором отдельные биты - это отдельные данные Телепаты наметили несколько путей решения проблемы: путь 1) переконвертировать таблицу БД и разбить скомканное поле на отдельные поля (идеальный вариант, как по мне. Но требует переработать все запросы, которые касаются данного поля) путь 2) в конструкторе диалога для каждого мапленного виджета добавить (setProperty) свойство (bitIndex) и как-то это дело обрабатывать на отрезке пути "виджет"<-->"record" (тут телепаты за нехваткой знаний о QDataWidgetMapper умолкают) путь 3) телепаты знают, что все кутешные SQL-модели предназначены для самых банальных случаев с небольшими объёмами данных. И телепаты предлагают использовать старый добрый советский способ: обработать событие изменения QSpinBox, достать запись из БД по текущему ID, разложить поля в виджеты. Если что-либо редактируется, взводится какой-то флажок. Если есть попытка сменить запись, когда есть редактирвоанные данные, то запись сначала перезаписывается новыми данными Сообщение отредактировал Алексей1153 - 13.4.2021, 17:35 |
|
|
Текстовая версия | Сейчас: 26.11.2024, 3:07 |