Доброго времени суток.
В посте «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 и как ее использовать, и другие, то я готов продолжить…
Автор: tnsr