Возможно вам тоже покажется, что развитие 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)


  1. RPG18
    00.00.0000 00:00

    Возможно вам тоже покажется, что развитие Qt как минимум в части Sql остановилось этак лет 12 назад.

    Может из-за развития mobile/web first потребность в этом отпала?


    1. KanuTaH
      00.00.0000 00:00
      -1

      И появился звездец типа Едадила, разработчикам которого руки бы оторвать по самую жопу.


      1. kkmspb Автор
        00.00.0000 00:00

        Не надо расстраиваться раньше времени


    1. kkmspb Автор
      00.00.0000 00:00

      Может быть, но здесь речь пока о приложениях на Qt по Виндоус, необходимость в которых пока не отпала вроде бы.


    1. kkmspb Автор
      00.00.0000 00:00

      mobile/web first

      Чего-то не понял, это о чём?


  1. kkmspb Автор
    00.00.0000 00:00

    Небольшое видео для демонстрации возможностей развития классов QSqlTableModel и QTableView, https://youtu.be/HKrCBZA5eVI

    Добавили субучет (с версии 10.х.х). Например выбрали товар (у товара стоит субучет(да)) будет вызван диалог выбора из справочника субучета (например размеры одежды, обуви). Количество вложенных уровней субучета не ограничено.