Здравствуйте, гость ( Вход | Регистрация )
Алексей1153 | Дата 15.4.2021, 14:33 |
JohnZ, значит, нагрузка не интенсивная. Да и 50кил записей - это не так уж и много про сложность запроса - сам видишь, какие костыли намечаются я бы всё же рассмотрел вариант с разбивкой сложного поля на отдельные поля в таблице. То, что это как-то повлияет на скорость выборки или записи - это ещё нужно доказать. Сомневаюсь, что повлияет. Ну и хранимые процедуры в помощь, они вроде как ушустряют запись за счёт того, что запрос заранее скомпилирован и оптимизирован |
|
JohnZ | Дата 15.4.2021, 12:28 |
JohnZ, нет, я на самом деле не понял ТЗ )) Ты меня переоцениваешь. С классом QDataWidgetMapper ранее не сталкивался, но сейчас в справке почитал, вроде понял, для чего он - вроде как листалка записей из таблицы, при этом поля записи отображаются в нужном виджете на форме. Прошу прощения, я видимо Вас перепутал с другим участником форума, lanz-ом. Sorry ... Это он мне помогал с решением проблем, описанных выше ... Цитата Позвал телепатов, они предполагают, что проблема именно в том, что значения нескольких QCheckBox-ов упакованы в ОДИН uint32 то есть, вместо нескольких полей в БД, как это было бы правильно, используется одно поле, в котором отдельные биты - это отдельные данные Да, именно так. Множество бит данных, по которым с вероятностью в 95 % не будет "прямых" SQL-выборок. Это позволяет укоротить запись в таблице, со всеми вытекающими ... 5 % - ? Дык SQL уже умеет работать с битами через встроенные функции Цитата Телепаты наметили несколько путей решения проблемы: путь 1) переконвертировать таблицу БД и разбить скомканное поле на отдельные поля (идеальный вариант, как по мне. Но требует переработать все запросы, которые касаются данного поля) Такой вариант присутствует в т.ч. на тех полях, которые с высокой долей вероятности могут оказаться в условии выборки из таблицы БД. Цитата путь 2) в конструкторе диалога для каждого мапленного виджета добавить (setProperty) свойство (bitIndex) и как-то это дело обрабатывать на отрезке пути "виджет"<-->"record" (тут телепаты за нехваткой знаний о QDataWidgetMapper умолкают) путь 3) телепаты знают, что все кутешные SQL-модели предназначены для самых банальных случаев с небольшими объёмами данных. И телепаты предлагают использовать старый добрый советский способ: обработать событие изменения QSpinBox, достать запись из БД по текущему ID, разложить поля в виджеты. Если что-либо редактируется, взводится какой-то флажок. Если есть попытка сменить запись, когда есть редактирвоанные данные, то запись сначала перезаписывается новыми данными У меня весь проект на этих моделях, и почему "SQL-модели предназначены для самых банальных случаев с небольшими объёмами данных" ? Тесты на объёмах 20...50 тыс записей (накладные) на Расбери 2 показал вполне приемлимый, для комфортной работы юзверя, результат. На больше пока не претендую На Расбери 4 и современных х86, по понятным причинам он ещё лучше. |
|
Алексей1153 | Дата 13.4.2021, 17:33 |
JohnZ, нет, я на самом деле не понял ТЗ )) Ты меня переоцениваешь. С классом QDataWidgetMapper ранее не сталкивался, но сейчас в справке почитал, вроде понял, для чего он - вроде как листалка записей из таблицы, при этом поля записи отображаются в нужном виджете на форме. Позвал телепатов, они предполагают, что проблема именно в том, что значения нескольких QCheckBox-ов упакованы в ОДИН uint32 то есть, вместо нескольких полей в БД, как это было бы правильно, используется одно поле, в котором отдельные биты - это отдельные данные Телепаты наметили несколько путей решения проблемы: путь 1) переконвертировать таблицу БД и разбить скомканное поле на отдельные поля (идеальный вариант, как по мне. Но требует переработать все запросы, которые касаются данного поля) путь 2) в конструкторе диалога для каждого мапленного виджета добавить (setProperty) свойство (bitIndex) и как-то это дело обрабатывать на отрезке пути "виджет"<-->"record" (тут телепаты за нехваткой знаний о QDataWidgetMapper умолкают) путь 3) телепаты знают, что все кутешные SQL-модели предназначены для самых банальных случаев с небольшими объёмами данных. И телепаты предлагают использовать старый добрый советский способ: обработать событие изменения QSpinBox, достать запись из БД по текущему ID, разложить поля в виджеты. Если что-либо редактируется, взводится какой-то флажок. Если есть попытка сменить запись, когда есть редактирвоанные данные, то запись сначала перезаписывается новыми данными |
|
JohnZ | Дата 13.4.2021, 11:14 |
Я нисколько не сомневаюсь что ты меня правильно понял, но ведь решения пока так и нет ... Видимо придётся что-либо "мутить" с QDataWidgetMapper-ом ... Я пока другого варианта в упор не вижу ... |
|
Алексей1153 | Дата 13.4.2021, 9:09 |
JohnZ, ну, хорошо. Будем считать, что я не осилил | |
JohnZ | Дата 12.4.2021, 17:54 |
Алексей, Вот теперь я понял, что моя <--> твоя не понимайт Перечитай первую месагу. Видимо я там чего-то упустил ... Вот смотри, в QT-Дизайнере я сделал форму, на которой лежит куча QCheckBox-в, которые в БД находятся в ОДНОМ поле, т.е. по-сути упакованы в один INT. Каждому QCheckBox-у я добавил дин-е св-во Idd и Bit (на картинке обведены красным). Далее этот файл формы грузится в конфигурацию Конфигуратором. (показано на второй картинке) и далее уже Исполнитель выполняя полученную т.о. xml-конфигурацию, показывает эту форму, и читает/сохраняет значения в/из БД. Судя по "Промоушен работает - им пользуюсь." -> Как я тебя понял, ты полагаешь что я должен был *.h файл этой формы положить в Исполнителя чтобы эту форму показать и с ней работать ? Дык нет, всё сделано динамически, и если мне не изменяет склероз. то ты-же мне и подсказывал ( MVC & QDataWidgetMapper ) как это можно было-бы реализовать. Всю работу по обмену Модель <-> БД у меня выполняет QDataWidgetMapper (кусок исходника выше) но не устраивает dataMapper->addMapping(cb, x), т. к. нет доп. параметра, в который можно было-бы положить значение Bit ! Именно по этой причине приходится каждый раз делать это скриптом, а хотелось-бы что-бы Исполнитель (т.е. Платформа) делал эту работу так-же динамически, БЕЗ необходимости использования скрипта Сумбурно, но что-то типа этого, схематично ...
Цитата Нужен умный масив в объекте, который скармливаем dataMapper-у, и он будет хранить Idd и указатели на QCheckBox-ы на форме. что имеется в виду? Нужно в рантайме собрать в одну таблицу список значений этих свойств у всех контролов ? ИМЕННО ! Только видимо не в таблицу а массив, и в/из него упаковывть / расупаковывть значения в один uint32, который по-идее должен мапится QDataWidgetMapper-ом, но мы ему должны подсунуть на мапинг что-то типа того что выше ! QDataWidgetMapper не знает о том, что значения нескольких QCheckBox-ов упакованы в ОДИН uint32 ... Это сейчас делает скрипт ... Удачи ! |
|
Алексей1153 | Дата 11.4.2021, 7:05 |
Дык Дизайнер его и так, за безплатно отображает . Промоушен работает - им пользуюсь почему-то у меня не отображает. И никогда это не работало. Может - это было в старых креаторах? У меня сейчас QtCreator 4.13.2 специально попробовал сделать класс со свойствами, сделал промоушен. Нифига в свойствах в таблице не отобразилось
но, допустим, у тебя это работает, ок. Нужен умный масив в объекте, который скармливаем dataMapper-у, и он будет хранить Idd и указатели на QCheckBox-ы на форме. что имеется в виду? Нужно в рантайме собрать в одну таблицу список значений этих свойств у всех контролов? |
|
JohnZ | Дата 10.4.2021, 13:29 |
JohnZ, как достать свойство и установить его программно - это я понимаю. А для отображения его в дизайнере? Разве не нужно для этого лезть в файлы IDE или Qt ? Или я отстал от жизни, что-то там поменяли. Я давно с этим не сталкивался Дык Дизайнер его и так, за безплатно отображает ... и никуда не надо лезть. Цитата а tooltip - это свойство QWidget, оно в дизайнере уже есть. И туда можно вбить любой текст, в том числе и json, где можно описать что угодно. При этом ничего исправлять не нужно в файлах Динамические св-ва в дизайнере могут быть и строкового типа, как и tooltip, но зачем ? ... если уже есть/создано св-во Bit ?! Нужен умный масив в объекте, который скармливаем dataMapper-у, и он будет хранить Idd и указатели на QCheckBox-ы на форме. Что-то типа этого ... Пока на ум ничего более не приходит |
|
Алексей1153 | Дата 10.4.2021, 6:18 |
JohnZ, как достать свойство и установить его программно - это я понимаю. А для отображения его в дизайнере? Разве не нужно для этого лезть в файлы IDE или Qt ? Или я отстал от жизни, что-то там поменяли. Я давно с этим не сталкивался а tooltip - это свойство QWidget, оно в дизайнере уже есть. И туда можно вбить любой текст, в том числе и json, где можно описать что угодно. При этом ничего исправлять не нужно в файлах |
|
JohnZ | Дата 9.4.2021, 13:48 |
Алексей, Дизайнер ты подразумеваешь родной QT-шный тот что в посте выше, или Конфигуратор тот что в прицепе ? На картинке показана загрузка созданного UI-шного файла в конфигурацию. Всё предельно просто ... А зачем плагин ? Это Исполнитель сделает ... см.ниже. (или моя твоя не понимайт ) Аналогом tooltip/json видимо является динамич-е свойство Bit ?! Вот функция мапирования с частичным парсингом. Лишнее убрано. В заремленой строке со стрелкой (valB) имеем возможность достать свойство Bit и его значение. Раскрывающийся текст
Ведь всё дело в том, что у всех QCheckBox-сов Idd будет один и тот-же, отличие будет только в значении динам-го свойства Bit. Дык вотЪ, я предполагю вариант подмены QCheckBox на что-то типа умного масива, который и будет админить свойство Bit, и именно его скармливать dataMapper-у ? Как это могло-бы выглядеть ? Может будут ещё варианты ? |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 28.3.2024, 16:37 |