LinuxForum.Fans
Тема

dulldbtools

Автор: somebyte 2 сообщений 1950 просмотров
#167799

Здравствуйте!
Хочу представить свой проект, библиотечку dulldbtools.
Она позволяет достаточно быстро строить GUI-приложения к СУБД Postgres. Такие вещи, как деревья и таблицы, с возможностью редактирования. Для этого пользователю достаточно составить xml-описание и подсунуть его объекту-виджету при создании. Всё довольно просто. В исходниках есть примеры. Библиотека компилируется под mingw и msvc. На выходе dll. До проверки в *nix, к сожалению, руки не доходят. Примеры компилируются вместе с библиотекой и падают в каталог bin. К сожалению документации пока никакой нет.

Библиотека пишется на C++ и использует Qt4, libxml2, libpq.

Вот ссылка на svn. Как правило там код рабочий.
И ссылка на мой ЖЖ. Там просто крайние новости.
Распространяется на условиях GPL.

Пока поддерживается только PostgreSQL, но в планах поддержка sqlite. Осенью.

Для отображения таблиц используется класс наследуемый от QTableView.
Для отображения деревьев используется класс наследуемый от QTreeView.
Оба класса получают данные от моделей на основе QAbstractItemModel, которые получаю настройки из xml.
Описание этих классов в qt_dbtools.hpp.
Класс таблицы - qt_dbtableview.
Класс дерева - qt_dbtreeview.
Класс диалога - qt_dbdialog - для создания объектов редактирования таблицы или дерева.

Классы qt_dbtablemenu и qt_dbtreemenu ползволяют соединить соответственно qt_dbtableview или qt_dbtreeview c qt_dbdialog, для добавление, редактирования, удаления данных через контекстное меню. Т.е. объекты типа QAction добавляются в qt_dbtableview или qt_dbtreeview и их от туда всегда можно вытащить, при помощи метода actions(), для переопределения стандартных названий в меню. Кроме того qt_dbtablemenu и qt_dbtreemenu сделаны таким образом чтобы не мешать программеру иметь дополнительно свои пункты в меню.

Привожу пример, как создаётся простая таблица при помощи dulldbtools:

text
// WareHouseTable

WareHouseTable :: WareHouseTable (const QString& title, QWidget* parent, Qt::WindowFlags f) : QDockWidget(title, parent, f), _db(0), _view(0), _dialog(0), _menu(0) { setFeatures(QDockWidget::DockWidgetMovable); _db = new pgdb("pg_warehouse"); if (_db->open()) { _view = new qt_dbtableview(".\\xml\\images\\warehouse_table.xml", "/table", _db); _dialog = new qt_dbdialog(".\\xml\\images\\warehouse_table.xml", "/table", _db, this); _menu = new qt_dbtablemenu(_view, _dialog); setWidget(_view); } else _lprintf(LOG_ERR, "%s\n", _db->last_error()); }

WareHouseTable :: ~WareHouseTable() { delete _menu; delete _view; delete _dialog; delete _db; }

Подробнее можно посмотреть в исходниках примера "warehouse". И если есть вопросы задать здесь.

Спасибо за внимание.

#167904

Хм. Интересно. Будем поглядет.
Вот только пример кода все такеи лучше бы смотрелся

text
в тегах code
Войдите или зарегистрируйтесь, чтобы ответить.