- PVSM.RU - https://www.pvsm.ru -
Доброго времени суток.
В посте «Harbour — новое лицо xBase family» [1] Александр Кресин рассказал, что такое Harbour.
Проект QtContribs — это расширение Harbour для использования Qt.
Т.е. все, кто знаком с dbase-языками программирования (foxpro, clipper и др.) смогут, используя QtContribs, писать кроссплатформенные приложения с графическим интерфейсом.
Учитывая изложенное в посте «Разработка Qt-приложения с доступом к MySQL под Android» [2], возможности для разработки под Android + mySQL существуют.
Но главный разработчик библиотеки QtContribs (Pritpal Bedi) консервативен и не развивает ту часть, которая связана с QtSql.
Я посчитал это неправильным и немного поучаствовал в развитии этого направления.
Далее покажу пример использования QSqlTableModel и QTableView.
Итак, в поставке Qt есть много примеров и среди них приложение qsqlbrowser. Я взял из него файл browserwidget.ui — это окошко приложения, сделанное в qt-designer, и немного его исправил.
Подготовил проект.
Для связи объектов Harbour и Qt сделаны файлы с раширением qth — из них генерятся cpp-файлы (биндиги или проще связки).
Два файла qth я вложил в архив проекта.
Весь проект для Linux лежит здесь: форум QtContribs [3].
Сделал основную программу на 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 [4].
Приглашаю всех обладающих свободным временем и желающих разбираться в Си, Си++ и других языках к развитию проекта.
Если возникнут вопросы (на русском языке) как собрать и использовать Harbour и QtContribs, что такое HbIDE и как ее использовать, и другие, то я готов продолжить…
Автор: tnsr
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/programmirovanie/65693
Ссылки в тексте:
[1] «Harbour — новое лицо xBase family»: http://habrahabr.ru/post/198618/
[2] «Разработка Qt-приложения с доступом к MySQL под Android»: http://habrahabr.ru/post/134502/
[3] форум QtContribs: https://groups.google.com/forum/#!topic/qtcontribs/hsh_fNTSXV8
[4] HBQT-Tutorial: http://www.elektrosoft.it/tutorials/hbqt/hbqt.asp
[5] Источник: http://habrahabr.ru/post/230801/
Нажмите здесь для печати.