Pull to refresh

Comments 25

Хорошо бы добавить в статью ссылку на место, откуда его можно скачать.
И вопрос: QtContribs имеет какое-либо отношение к hbqt, который входит в набор contrib для Harbour?
QtContribs это и есть hbqt из набора contrib. Только некоторое время назад он отделился от Harbour и вылился в отдельный проект.
Теперь в папке contrib нет hbqt.

Ссылки есть в заголовке форума, на который я ссылался. Но я размещу прямую. Спасибо.
> Теперь в папке contrib нет hbqt.
github.com/harbour/core/tree/master/contrib/hbgt

И еще. Наверное, уместнее было бы спросить в соответствующей группе, но раз уж мы тут…
Что-то он у меня не компилируется.

hbmk2 qtcontribs.hbp

получаю:

hbmk2: Building sub-project (level 2): debug\hwgdebug.hbp
hbmk2: Target up to date: ..\..\lib\win\bcc\hwgdebug.lib
hbmk2: Building sub-project (level 2): hbqt\qtcore\hbqtcore.hbp
hbmk2: Building sub-project (level 3): hbqt\qtcore\hbqtcores.hbp


и на этом — все…
Я еще корректирую hb*-файлы, а то мне кажется hbmk2 несколько проходов делает.

1. В файлах hbqtwidgets.hbc, hbxbp.hbc комментирую строку
#libs=hbqt.hbc
2. Создаю в папке hbide файл hbide.hbc с одной строкой:
plugins=/home/alex/workspace/qtcontribs-code/hbqt/hbmk2_qt.hb
3. Корректирую hbide.hbp — вот исправленный фрагмент файла:
/home/alex/workspace/qtcontribs-code/hbxbp/hbxbp.hbc

hbide.hbc

#/home/alex/workspace/qtcontribs-code/hbqt/hbqt.hbc

gtqtc.hbc

-lsupc++
-lhbqtcore 
-lQt5Core 
-lhbqtgui 
-lQt5Gui 
-lQt5Widgets 
-lQt5PrintSupport 
#-lhbqtnetwork 
#-lQt5Network 
#-lhbqtsql 
#-lQt5Sql 
#-lhbcplr 
#-lhbdebug 
#-lharbour
#-lQt5Designer
#-lQt5Xml

/home/alex/workspace/qtcontribs-code/hbqtwidgets/hbqtwidgets.hbc
/home/alex/workspace/harbour-core/contrib/hbformat/hbformat.hbc


4. в некоторых hbp-файлах прописываю полный путь к некорым hbc-файлам(если есть ошибки сборки)
Вот нашел примеры для винды:
groups.google.com

по названиям переменных окружения можно найти в гугле
Наверно нужно переменные окружения определить.
Вот мой батник для Linux:
./copy_inc.sh
export HB_QT_MAJOR_VER=5
export HB_WITH_QT=/opt/Qt/5.3/gcc/include
export HB_QTPATH=/opt/Qt/5.3/gcc/bin
export LD_LIBRARY_PATH=/opt/Qt/5.3/gcc/lib
/usr/local/bin/hbmk2 ./qtcontribs.hbp -pic -L/opt/Qt/5.3/gcc/lib >log.txt
./copy_libs.sh

В общем по аналогии для винды. Но если нужно точно я могу поискать ссылку на пример виндовой сборки
и без подробных ошибок часто сложно сказать в чем дело.
Пришлось обновить Harbour — у меня был 3.2. Получается, что QtContrib не строится со стабильной версией Harbour (3.0) с официального сайта — что, вообще говоря, неправильно.
Вроде, компиляция пошла, но я рано радовался — когда дело дошло до каталога hbqtwidgets, сразу же вылетела с ошибкой: «Can't open #include file hbqtgui.ch» — где-то не прописан к нему путь…
у меня в батнике сборки вызывается еще батник копирования ch-файлов, я уж не помню зачем, но может пригодится:
cp /home/alex/workspace/qtcontribs-code/hbqt/qscintilla/*.ch /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qscintilla/*.hbx /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtbluetooth/*.ch /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtbluetooth/*.hbx /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtcore/*.ch /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtcore/*.hbx /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtdeclarative/*.ch /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtdeclarative/*.hbx /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtdesigner/*.ch /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtdesigner/*.hbx /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtgui/*.ch /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtgui/*.hbx /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtmultimedia/*.ch /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtmultimedia/*.hbx /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtmultimediawidgets/*.ch /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtmultimediawidgets/*.hbx /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtnetwork/*.ch /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtnetwork/*.hbx /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtopengl/*.ch /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtopengl/*.hbx /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtpositioning/*.ch /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtpositioning/*.hbx /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtqml/*.ch /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtqml/*.hbx /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtquick/*.ch /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtquick/*.hbx /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtscript/*.ch /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtscript/*.hbx /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtsql/*.ch /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtsql/*.hbx /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtsvg/*.ch /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtsvg/*.hbx /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtwebkit/*.ch /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtwebkit/*.hbx /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtwebsockets/*.ch /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtwebsockets/*.hbx /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtxml/*.ch /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qtxml/*.hbx /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qzxing/*.ch /usr/local/include/harbour -r 
cp /home/alex/workspace/qtcontribs-code/hbqt/qzxing/*.hbx /usr/local/include/harbour -r 
Ясно. Из-за того, что пути к заголовочным файлам не прописаны вы все эти файлы переписываете в одно место — в include/ от Harbour. Но мне не хотелось бы засорять эту папку — потом труднее найти нужные файлы.
Расскажу о еще одной особенности применения Qt.
QtCreator при сборке проектов, в которых имеются интерфейсы .ui, генерирует в рабочем каталоге сборки файлы .cpp с классами описывающими этот интерфейс.
В примерах Qt я увидел, что функционал интерфейса можно расширять за счет наследования от генерируемых классов.
В QtContribs плагин hbmk2_qt.hb также генерирует .prg файлы в рабочем каталоге сборки, тоже с классами описывающими интерфейс файлов .ui.
От них тоже можно делать производные классы.
А почему в .hbp — файлы включены всякие .ui, .qrc? У меня Harbour пытается их откомпилировать и, естественно, вылетает с кучей ошибок.
Продублировал *.ch файлы, убрал из .hbp .ui и .qrc — при финальной линковке получил unknown function HBQTRES_HBIDE(). Проверил — она действительно упоминается (вызывается ) только один раз — в hbide/main.prg… Где она объявляется-то?
Файлы .ui(формата xml) — это описания форм, созданные в QtDesigner(конструктор интерфесов).
Плагин hbmk2_qt.hb из них генерирует .prg файлы в рабочем каталоге сборки.
qrc — я могу предположить это перечень ресурсов(картинки и прочее).
Не надо их удалять, давайте лучше ошибки разберем.

Где объявляется HBQTRES_HBIDE() если честно не задавался вопросом.
Прочтите внимательней комментарии выше.
Ошибки? Ок.
hbmk2[hbqtwidgets]: Warning: Cannot nest deeper in
C:\Harbour\addons\hbqt\hbqtcore.hbc
hbmk2[hbqtwidgets]: Warning: Cannot nest deeper in
C:\Harbour\addons\hbqt\hbqtgui.hbc
hbmk2[hbqtwidgets]: Warning: Cannot nest deeper in
C:\Harbour\addons\hbqt\hbqtnetwork.hbc

hbqtwidgets\scroll.ui(1) Error E0030 Syntax error «syntax error at '<'»

hbqtwidgets\scroll.ui(2) Error E0030 Syntax error «syntax error at '<'»


И так на каждую строчку в scroll.ui. Может, предупреждение, что hbmk «Cannot nest deeper in...» связано с тем, что scroll.ui не преобразовался во что должен…
Ворнинги пропустим я на них не обращал внимания.

hbqtwidgets\scroll.ui(1) Error E0030 Syntax error «syntax error at '<'»


это означает невозможность обработки ui-файла программой сборки hbmk2. Для обработки данного типа файлов должен быть подключен плагин hbmk2_qt.hb.
(Если будет интересно поищите информацию о плагинах hbmk2.)
Путь к нему прописан в файле hbqt_common.hbc, на который ссылаются другие файлы hbc. Я исправлял эту ошибку прописывая полный путь в файлах hbp.
В данном случае мне кажется в файле hbqtwidgets.hbp надо прописать полный путь к файлу hbqt.hbc. По идее он должен находить его в каталоге /usr/local/share/harbour/addons/hbqt. Если честно я не знаю почему этого не происходит. Я указывал путь к исходникам — у меня здесь /home/alex/workspace/qtcontribs-code/hbqt/.

К тому же вся эта завязка списков библиотек в файлах hbc, по-моему, не оптимальна и hbmk2 делает несколько проходов.
Если вы хотите сократить время пересборки(можно и потом) прочтите внимательно мой комментарий выше о корректировке hbp-файлов(там 4 пункта).
Кстати а ворнинги — видимо подскажут где искать причину
Построил, наконец, hbide. Для этого понадобилось следующее:

  1. Взять свежий Harbour ( в 3.2, который у меня был, hbmk не поддерживал какие-то вещи ) и откомпилировать его с ключом HB_WITH_QT=...
  2. Создать скрипт для сборки, в котором установить HB_QT_MAJOR_VER, HB_WITH_QT и HB_QTPATH
  3. Переписать в hbqtwidgets/ и в hbxbp/ файлы hbqtgui.ch, hbqt_version.ch, hbqtcore.ch — в harbour/include все же не хочется.
  4. В файлах hbdbu.hbp, hbide.hbp, hbqtwidgets.hpb и hbxbp.hbp прописать полный путь к hbqt.hbc, а в hbdbu.hbp — и к hbqtwidgets.hpc
  5. После вылета с ошибкой при линковке hbide.exe переписать две вновь созданные библиотеки: libhbqtwidgets.a и libhbxbp.a в harbour\addons\hbqt\lib\win\mingw\ и запустить процесс еще раз.


Посоветовать что-то конкретное по настройке конфигурационных файлов hbmk не могу, потому что сам не использую эту утилиту и знаком с ней только в самых общих чертах. Но с этим надо что-то делать.
Я бы, конечно, использовал стандартные make средства. Учитывая, что набор С компиляторов для qtcontribs очень ограничен ( mingw для Windows и gcc для Linux и Mac ), суммарное количество конфигурационных файлов будет меньше, чем сейчас, ну и разобраться будет проще.
hbmk2 очень мощный инструмент — сравним с make
а выбор есть, процитирую:
лучшая утилита - это та утилита, которую ты знаешь лучше всего
лучшая утилита — это та утилита, которую ты знаешь лучше всего

Согласен. Но я бы добавил «и остальные члены команды».
Судя по всем перечисленным проблемам, у меня создалось впечатление, что ни Притпал, ни кто другой не владеет hbmk достаточно, чтобы эти проблемы решить.
Я столкнулся с тем, что Притпал, допустим, о intellisence в hbide написал в каком-то форуме в 2010 году, кажется, и все.
Нехватка документации сказывается.
Например, вот этот тред обязательно рекомендую прочитать:
groups.google.com/forum/#!topic/qtcontribs/Sn4OEl2yZw4

Приходится самому копать исходники.
Ну собственно, это как минус так и плюс опэнсурса.
Дополню

Я столкнулся с тем, что Притпал, допустим, о intellisence в hbide написал в каком-то форуме в 2010 году, кажется, и все.
Нехватка документации сказывается.
Например, вот этот тред обязательно рекомендую прочитать:
Особенность применения сигналов Qt в QtContribs учитывая область видимости привязываемой функции

Может где-то написано и об этих проблемах. Вот сейчас попытался посмотреть код по тем ворнингам, что указывались выше.
Там в hbmk2 константа _HBMK_NEST_MAX = 10, почему может гугл подскажет.

В общем, приходится самому копать исходники.
Ну собственно, это как минус так и плюс опэнсурса.
Only those users with full accounts are able to leave comments. Log in, please.