Уважаемые друзья!
Приближается к концу работа над 0.5-й версией моей ORM-библиотеки, QsT SQL Tools. Многие помнят, как я пиарил прошлые версии в
этой теме. Позвольте, я расскажу, что изменилось. После релиза 0.4-й версии я работаю в нескольких направлениях:
- внутренняя реорганизация библиотеки;
- улучшение интеграции QST и подсистемы Qt's Interview;
- упрощение интерфейсов, приведение их к логичному виду;
- другая интеграция с интерфейсной частью Qt;
- отладка и рефакторинг;
- обновление текущей документации и перевод ее на английский язык;
- небольшие доработки в поддержке SQL.
На данный момент последней версией является
QST 0.5.9 pre-alpha. Из этого статуса я ее выпущу, когда буду уверен, что больше не будет никаких существенных изменений, влияющих на совместимость между подверсиями.
Так же я выложил проект-пример,
QTelecom - биллинговую программу, которую мы пишем с напарником для своей организации. Прошу заметить, программа находится в самом начале, выкладывается исключительно для демонстрации, кое-что там урезано, многое не сделано, и демонстрирует она не все аспекты QST. По мере необходимости проект-пример буду обновлять.
Итак, что добавилось и в каком оно состоянии?
*
Динамические фильтры, alpha.Описание. Фильтры задаются в коде, декларативно, привязываются к пустым QWidget'ам на форме и создаются в run-time. Возможны вертикальные и горизонтальные фильтры. Поддерживаемые типы данных: текст (через QLineEdit), выпадающий список (через QComboBox+класс-хэндлер), дата (через QDateEdit). Для текстового поля возможен как поиск подстроки, так и поиск всего введенного слова. Фильтры могут включаться и выключаться индивидуально с помощью QCheckBox. Между виджетами фильтров передача фокуса настроена так, чтобы было удобно. Фильтры можно скрывать и отображать, привязав соответствующие кнопки.
Что в этом хорошего? Не нужно руками дизайнить и располагать на форме элементы фильтров, настраивать реакцию на их изменение. Все будет сделано автоматически и в едином стиле.
Чего еще не хватает? Не хватает поддержки разных типов, как-то: дата и время, число, дробное число, булевый тип и т.д. Еще планируется сделать выпадающий список, из которого можно было бы выбрать оператор сравнения. Так же в планах много чего еще, поэтому aplha.
Примеры.Горизонтальные фильтрыВертикальные фильтры*
Функциональный автокомплитер, betaОписание. Является надстройкой над QCompleter. Позволяет выполнять автозавершение в нескольких режимах: трех стандартных без обращения к БД (PopupCompletion, UnfilteredPopupCompletion, InlineCompletion) и три расширенных, с обращением к БД: PrefixDBQueryingCompletion, InfixDBQueryingCompletion, PostfixDBQueryingCompletion. Позволяет установить минимальное количество символов для автокомплита, таймаут срабатывания, имя поля в SQL-запросе, которое будет использовано для автокомплита. Поддерживается QComboBox и QLineEdit. Есть сигналы и слоты для привязки к другим объектам.
Что в этом хорошего? Много чего, QstCompleter расширяет возможности стандартного QCompleter и даже упрощает его использование.
Чего еще не хватает? Нужна поддержка разных типов, возможно, какие-то другие улучшения.
*
Настройка представлений (QTableView, QTreeView, QListView), beta.Описание. Одна из отличительных черт QST - это интеграция с подсистемой Interview. Задавая описатели для запросов SQL, можно было указать отображаемость, заголовок и ширину колонки. В версии 0.5 эти параметры теперь можно изменять с помощью вызова функций в run-time.
Что в этом хорошего? Открываются такие возможности, как сохранение параметров каждого пользователя, автонастройка представлений из файла настроек, убирается рутиная работа.
Чего еще не хватает? При изменении ширины столбца у таблицы, новая ширина пока не сохраняется. Если перезагрузить класс-хэндлер, вернется прежняя ширина. Это будет исправлено в ближайших версиях.
*
Раздельная сортировка данных внутри представлений, betaОписание. В QST к одному классу-хэндлеру и одной модели можно привязать сколько угодно разных представлений. При этом для каждого из них можно разрешить или запретить сортировку, не влияющую на другие представления. Данные полей так же извлекаются раздельно.
*
Заменяемые компоновщики SQL-запросов, betaОписание. Для разных диалектов SQL можно задать свой компоновщик и использовать его для генерации SQL-запросов. По умолчанию в версии QST 0.5 генерируется диалект PostgreSQL.
Примечание. Поддержка самого SQL-языка пока на низком уровне. В данной версии я делал упор на расширение, а не углубление применимости библиотеки. Наработки кое-какие есть, и в следующих версиях QST будут значительные изменения в генерации запросов.
Пожалуй, это главные изменения в библиотеке, если не считать масштабных рефакторингов и многих новых функций внутри старых классов. Буду рад любому отзыву.