crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> 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 ранее не сталкивался, но сейчас в справке почитал, вроде понял, для чего он - вроде как листалка записей из таблицы, при этом поля записи отображаются в нужном виджете на форме.

Позвал телепатов, они предполагают, что проблема именно в том, что
Цитата(JohnZ @ 12.4.2021, 19:54) *
значения нескольких QCheckBox-ов упакованы в ОДИН uint32

то есть, вместо нескольких полей в БД, как это было бы правильно, используется одно поле, в котором отдельные биты - это отдельные данные

Телепаты наметили несколько путей решения проблемы:

путь 1) переконвертировать таблицу БД и разбить скомканное поле на отдельные поля (идеальный вариант, как по мне. Но требует переработать все запросы, которые касаются данного поля)

путь 2) в конструкторе диалога для каждого мапленного виджета добавить (setProperty) свойство (bitIndex) и как-то это дело обрабатывать на отрезке пути "виджет"<-->"record" (тут телепаты за нехваткой знаний о QDataWidgetMapper умолкают)

путь 3) телепаты знают, что все кутешные SQL-модели предназначены для самых банальных случаев с небольшими объёмами данных. И телепаты предлагают использовать старый добрый советский способ: обработать событие изменения QSpinBox, достать запись из БД по текущему ID, разложить поля в виджеты. Если что-либо редактируется, взводится какой-то флажок. Если есть попытка сменить запись, когда есть редактирвоанные данные, то запись сначала перезаписывается новыми данными

Сообщение отредактировал Алексей1153 - 13.4.2021, 17:35
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.11.2024, 3:07