QtContribs=Harbour+QT

Автор: admin от 23-07-2014, 09:15, посмотрело: 687

Доброго времени суток.

В посте «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



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

QtContribs=Harbour+QT

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

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

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

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

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

Источник: Хабрахабр

Категория: Программирование, Веб-разработка

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Добавление комментария

Имя:*
E-Mail:
Комментарий:
Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
Введите два слова, показанных на изображении: *