QtContribs=Harbour+QT

в 8:32, , рубрики: mysql, open source, 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

Получилось вот что:

image

Вот и все, казалось бы.

Но чтобы это заработало, нужен драйвер qtmysql — его компиляция — это системный вопрос, там же на форуме я кратко описал, как это сделать.

Тем, кто заинтересовался, предлагаю посмотреть туториал разработки простых QtContribs-приложений: HBQT-Tutorial.

Приглашаю всех обладающих свободным временем и желающих разбираться в Си, Си++ и других языках к развитию проекта.

Если возникнут вопросы (на русском языке) как собрать и использовать Harbour и QtContribs, что такое HbIDE и как ее использовать, и другие, то я готов продолжить…

Автор: tnsr

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js