[Из песочницы] QtContribs=Harbour+QT
Доброго времени суток.В посте «Harbour — новое лицо xBase family» Александр Кресин рассказал, что такое Harbour.Проект QtContribs — это расширение Harbour для использования Qt.
Т.е. все, кто знаком с dbase-языками программирования (foxpro, clipper и др.) смогут, используя QtContribs, писать кроссплатформенные приложения с графическим интерфейсом.
Учитывая изложенное в посте «Разработка Qt-приложения с доступом к MySQL под Android», возможности для разработки под Android + mySQL существуют.
Но главный разработчик библиотеки QtContribs (Pritpal Bedi) консервативен и не развивает ту часть, которая связана с QtSql.Я посчитал это неправильным и немного поучаствовал в развитии этого направления.
Далее покажу пример использования QSqlTableModel и QTableView.Итак, в поставке Qt есть много примеров и среди них приложение qsqlbrowser. Я взял из него файл browserwidget.ui — это окошко приложения, сделанное в qt-designer, и немного его исправил.
Подготовил проект.
Для связи объектов Harbour и Qt сделаны файлы с раширением qth — из них генерятся cpp-файлы (биндиги или проще связки).Два файла qth я вложил в архив проекта.
Весь проект для Linux лежит здесь: форум QtContribs.
Сделал основную программу на Harbour:
#include «hbqtgui.ch» #include «hbqtsql.ch»
PROC main () LOCAL oBrowser, oMainWindow, oELoop, lExit:= .F. LOCAL oStrModel, oStrList, db LOCAL model LOCAL cTName CLS hb_cdpSelect («UTF8EX»)//Основная кодовая страница приложения
oMainWindow:= QMainWindow () oMainWindow: setAttribute (Qt_WA_DeleteOnClose, .F.)
oMainWindow: setWindowTitle («Qt SQL Browser») oBrowser = hbqtui_browserwidget (oMainWindow) oMainWindow: setCentralWidget (oBrowser: oWidget) oMainWindow: connect (QEvent_Close, {|| lExit:= .T. }) db = QSqlDatabase (): addDatabase («QMYSQL») db: setHostName («localhost») db: setDatabaseName («test») IF .NOT. db: open () ? «Not Connected!» RETURN ENDIF
oStrList:=db: tables () oStrModel:= QStringListModel (oStrList, oBrowser: listView) oBrowser: listView: setModel (oStrModel) cTName:= db: driver: escapeIdentifier (oStrList: At (0), 1/*QSqlDriver (): IdentifierType: cTableName*/) model:= QSqlTableModel (oBrowser: table, db) model: setTable (cTName) if (model: lastError (): type () != 0) ? model: lastError (): text () endif model: select () if (model: lastError (): type () != 0) ? model: lastError (): text () endif oBrowser: table: setModel (model)
oMainWindow: show ()
oELoop:= QEventLoop (oMainWindow) DO WHILE .t. oELoop: processEvents () IF lExit EXIT ENDIF ENDDO oELoop: exit (0) RETURN
Получилось вот что:
Вот и все, казалось бы.
Но чтобы это заработало, нужен драйвер qtmysql — его компиляция — это системный вопрос, там же на форуме я кратко описал, как это сделать.
Тем, кто заинтересовался, предлагаю посмотреть туториал разработки простых QtContribs-приложений: HBQT-Tutorial.
Приглашаю всех обладающих свободным временем и желающих разбираться в Си, Си++ и других языках к развитию проекта.
Если возникнут вопросы (на русском языке) как собрать и использовать Harbour и QtContribs, что такое HbIDE и как ее использовать, и другие, то я готов продолжить…