Возможно вам тоже покажется, что развитие Qt как минимум в части Sql остановилось этак лет 12 назад.
А ведь фреймворк заслуживает развития ибо базовые классы уровня QSqlTabelModel и QTableView предоставляют богатый функционал для реализации ваших запросов.
Итак речь пойдет о версии Qt 4.8.1 как ни странно, помните такую - Nokia connecting people.
Итак проблема в том, что фреймворк не так прост как кажется. Огромный объем кода, где каждая строчка имеет значение в буквальном смысле этого слова. Все по делу во всем надо разобраться и порог вхождения не пару лет месье...
Предлагаем вашему вниманию развитие классов QSqlTableModel/QTableView, с вашего позволения обзовем их PblSqlRelationalTableModel/PblTableView. Префикс Pbl мы придумали от имени создателя Pablo (не Public как может показаться), но это все в общем-то неважно, главное отличать классы форка.
Итак, что мы хотим? Мы хотим в нашем приложении на с++, которое работает с базой данных, QSlite3 к примеру, иметь возможность отрыть любую таблицу в диалоге и увидеть элементы управления: кнопки добавить, копировать, удалить строку. Также нам не помешает увидеть кнопки поиска по колонкам, отбор по значению поля, сортировку по колонке.
Но самое наверное заветное нам хотелось бы увидеть подстановку в поле с внешней связью текстовой замены поля id по данным другой связанной таблицы. И больше никогда не возвращаться к этой проблеме.
Основная идея представлена на картинке ниже. Переопределяется метод selectStatement и вводится новая функция translateFieldNames
А что так можно было? - да это возможно эксплуатируя класс PblSqlRelationalTableModel. Вся настройка конфигурации таблиц происходит в одном файле config.cpp (конечно же статически).
Объем кода классов PblSqlRelationalTableModel и PblTableView довольно большой и выложить полностью в данной статье нам кажется не обоснованным.
Поэтому полный форк можно скачать с гитхаба здесь: открытый проект развития.
Уважаемые знатоки логично спросят - почему используется Qt 4.8.1, 15 летней давности проект, принадлежавшей еще компании Nokia?
На это у нас нет однозначного ответа - как говорится: так исторически сложилось. Но что-то нам подсказывает, что мало что изменилось в версии Qt5/6.
Итак предлагаем мировому сообществу нашу версию развития библиотеки Qt для работы с таблицами базы данных.
Сразу надо отметить, что все библиотеки Qt 4.8.1 остаются оригинальными, наследование только штатное - открытое, классы Qt никаким образом не изменяются.
Ждем оценки и конструктивной критики знатоков. Правда для этого надо вспомнить исходники Qt 4.8.1...
Предлагайте, давайте ссылки, на другие варианты развития базовых классов Qt.
Всем успехов в нашем не простом искусстве, в искусстве самой высшей пробы, дорогие Леонардо да Винчи.
Комментарии (6)
kkmspb Автор
00.00.0000 00:00Небольшое видео для демонстрации возможностей развития классов QSqlTableModel и QTableView, https://youtu.be/HKrCBZA5eVI
Добавили субучет (с версии 10.х.х). Например выбрали товар (у товара стоит субучет(да)) будет вызван диалог выбора из справочника субучета (например размеры одежды, обуви). Количество вложенных уровней субучета не ограничено.
RPG18
Может из-за развития mobile/web first потребность в этом отпала?
KanuTaH
И появился звездец типа Едадила, разработчикам которого руки бы оторвать по самую жопу.
kkmspb Автор
Не надо расстраиваться раньше времени
kkmspb Автор
Может быть, но здесь речь пока о приложениях на Qt по Виндоус, необходимость в которых пока не отпала вроде бы.
kkmspb Автор
Чего-то не понял, это о чём?