Lazarus, LCL и кроссплатформенная разработка

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Lazarus, LCL и кроссплатформенная разработка

Сообщение Aleks69 » 08.05.2022 23:36:00

Добрый день!

Читал, что при разработке под Linux в Lazarus есть, скажем так, некоторые особенности, в зависимости от того, под GTK или QT запускается (разрабатывается?) приложение. Причем, проявлялось это даже в работе простых компонентов, если не ошибаюсь, ComboBox. Посоветуйте, пожалуйста, как лучше строить работу с точки зрения интерфейса в первую очередь. Разработка может быть в среде Windows и Linux. Linux Astra или Kubuntu, т.е. QT. Однако, возможен запуск и в ОС, где Gnome может быть основным. Каких сочетаний или чего-то еще следует избегать при разрабтке стандартных приложений - кнопки, чек-боксы, списки, гриды для таблиц из СУБД?
Aleks69
новенький
 
Сообщения: 35
Зарегистрирован: 29.03.2009 14:25:01

Re: Lazarus, LCL и кроссплатформенная разработка

Сообщение Vadim » 09.05.2022 05:57:33

Я некоторое время назад разрабатывал кроссплатформенное приложение - для Windows и Linux. В общем и целом каких либо проблем не было. Единственное что, один и тот же исходный код я собирал для Windows - в Lazarus'е для Windows, а для Linux - в Lazarus'е для Linux. Т.е. кроссплатформенные инструменты не использовал.
Поскольку программа предполагалась к распространению на множество компьютеров, то я, чтобы не париться с многобиблиотечными гномьими зависимостями, Lazarus для Linux собрал Qt-шную. Таким образом зависимость (что моей программы, что Lazarus'а) осталась только от одной библиотеки - qt5pas, которая просто копировалась на комп пользователя в системный каталог. Самой программе оболочка пофигу - Gnome или Plasma\KDE. Как правило все базовые Qt-шные библиотеки устанавливаются по умолчанию в любом обшераспространённом дистрибутиве Linux.
Насколько я помню, единственная разница в виндовом и линуксном коде была связана с режимом окна на весь экран. В Linux полноэкранное окно у меня закрывало системную панель инструментов, а вот в винде эту панельку приходилось прятать специальной функцией.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Lazarus, LCL и кроссплатформенная разработка

Сообщение SSerge » 09.05.2022 06:11:58

Imho, в первую очередь надо помнить следующее: на разных инсталляциях разная метрика шрифтов и разные шрифты. Исходя из этого, по-хорошему следует избегать абсолютных привязок элементов интерфейса полностью, иначе можно при некотором окружении получить наползающие друг на друга контролы. А это полагает изрядную возню и продумывание взаимных привязок элементов.
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Lazarus, LCL и кроссплатформенная разработка

Сообщение Aleks69 » 09.05.2022 13:22:36

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

> Lazarus для Linux собрал Qt-шную
Да, вот чувствую нужно еще раз проверить. Использую Lazarus по Linux, по-сути, впервые. Сначала ставил из исходников в Kubuntu 18.04 c libQt4Pas.so. Все супер. Попробовал с ней же под Astra Linux - на выходе сборка Lazarus, в которой по умолчанию GTK, хотя при сборке указывал QT. Видимо, нужно скачать libqt5pas. Где его берут-то ? На Github вроде что-то есть. Собирать как раньше: sudo make bigide LCL_PLATFOEM=qt ?

P.S.

Хм. И пособирал c libQt5Pas.so, и готовый Lazarus 2.2.0 (последний с сайта) из .deb пакетов ставил под Astra Linux Orel 2.12.44. Все равно в параметрах проекта по-умолчанию GTK2. Под Kubuntu 18.04, помнится, там был QT. Под Астрой получилось собрать проектик (пробовал на Lazarus из .deb) под QT. Для QT5 - ошибка при линковке. Похоже, связано это с тем, что в Астре, что ли, QT 5.11, а Lazarus пытается искать 5.12. Может быть, нужна другая версия libQt5Pas.so, а не та, которуя с качал 1.2.10 с Гитхаба? Пока не совсем понимаю, что тут от чего зависит.

На крайний случай, чем грозит работа для QT (не QT5) или GTK2? Вероятность запуска под разными версиями Linux уменьшается? И, кажется, если собирать под GTK2 цвет у Button игнорируется. Под QT все нормально.
Aleks69
новенький
 
Сообщения: 35
Зарегистрирован: 29.03.2009 14:25:01

Re: Lazarus, LCL и кроссплатформенная разработка

Сообщение Vadim » 09.05.2022 16:51:38

В Lazarus 2.2 уже есть опция для сборки под Qt5 (см. рис. 1)
qt5.png

Если уже поставлена библиотека, надо проверить, есть ли симлинк на эту библиотеку с названием "без хвоста" из цифр (см. рис. 2)
qt5_2.png

FreePascal при связывании с библиотекой, как правило, ориентируется на "безхвостые" названия. Если такого нет, то либо дополнительно поставить devel-пакет этой же библиотеки (в devel-пакете симлинк уже сидит готовый), либо сделать симлинк самому, ручками.
После пересборки Lazarus'а, программы он будет тоже собирать под Qt5.

Добавлено спустя 4 минуты 40 секунд:
Aleks69 писал(а):Может быть, нужна другая версия libQt5Pas.so

Нужно та, которая сидит в репозитории Вашей ОС. Заморачиваться с другими версиями (пусть и более новыми) смысла нет. Используются только базовые функции библиотеки, которые есть в любой версии.

Добавлено спустя 5 минут 40 секунд:
Aleks69 писал(а):чем грозит работа для QT (не QT5)

"Просто" Qt - это Qt версии 4. Остались ли ещё живые операционки, где четвёртая версия в качестве базовой - мне неизвестно. В большинстве случаев Qt стоит именно пятой версии.
По поводу GTK2 ничего не скажу, по-моему во всех нынешних ОС она ставится параллельно с GTK3. Кстати говоря, уже пора думать про GTK4... :-D

Добавлено спустя 2 минуты 28 секунд:
Aleks69 писал(а):Собирать как раньше: sudo make bigide LCL_PLATFOEM=qt ?

С пятой версией Qt (Qt5) собирать добавляя цифру 5:
Код: Выделить всё
sudo make bigide LCL_PLATFORM=qt5


Добавлено спустя 7 минут 39 секунд:
По поводу названия симлинка я, оказывается, ошибся. :-)
Для Qt5 Lazarus будет искать название - "libQt5Pas.so.1".
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Lazarus, LCL и кроссплатформенная разработка

Сообщение Aleks69 » 09.05.2022 19:03:06

> Нужно та, которая сидит в репозитории Вашей ОС
В менеджере пакетов Astra есть только libQt4Pas. Попробовать что ли подсунуть вручную 5 версии и собрать с LCL_PLATFORM=qt5.
Aleks69
новенький
 
Сообщения: 35
Зарегистрирован: 29.03.2009 14:25:01

Re: Lazarus, LCL и кроссплатформенная разработка

Сообщение Сквозняк » 09.05.2022 22:23:29

Собираю для линукса под GTK 2, полёт нормальный. Этот виджет древний, нет новых версий, значит почти везде работает, у него только сложность с мониторами с ретиной, значки там мелкие, но такие мониторы редкий пользователь вообще видел, потому на это можно забить. Да и сам лазарус по умолчанию собран для GTK 2.

Если разработка происходит в линуксе, то для винды можно собирать скриптом через вайн и установленный в нём лазарус. Его нужно один раз запустить и скопировать необходимые ключи командной строки.
Сквозняк
энтузиаст
 
Сообщения: 1109
Зарегистрирован: 29.06.2006 22:08:32

Re: Lazarus, LCL и кроссплатформенная разработка

Сообщение Aleks69 » 09.05.2022 22:57:01

> Собираю для линукса под GTK 2, полёт нормальный. Этот виджет древний, нет новых версий, значит почти везде работает
Ценная информация, спасибо!
Подскажите, это только в моем сетапе, или у других так: если собирать даже проектик из одной формы, под GTK2, после запуска цвет у Button игнорируется ? Под QT все нормально.

В режиме разработки цвет у Button никогда не меняется. Это, наверное, у всех так.
Aleks69
новенький
 
Сообщения: 35
Зарегистрирован: 29.03.2009 14:25:01

Re: Lazarus, LCL и кроссплатформенная разработка

Сообщение Сквозняк » 09.05.2022 23:31:59

Aleks69 писал(а):Подскажите, это только в моем сетапе, или у других так: если собирать даже проектик из одной формы, под GTK2, после запуска цвет у Button игнорируется ? Под QT все нормально.

В режиме разработки цвет у Button никогда не меняется. Это, наверное, у всех так.


Для GTK и Qt приложений в системе настройки цветов могут отличаться. В KDE есть утилиты для настройки внешнего вида гэтэкашных приложений. А как реализована синхронизация внешнего вида кутешных и гэтэкашных приложений в каждом конкретном линуксе, это вопрос конечно интересный. Но если прописать цвет кнопки в приложении конкретно, например, как в примере, то кнопка синяя постоянно.
Код: Выделить всё
var
  Form1: TForm1;
  Start3: byte=0;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormShow(Sender: TObject);
begin
if Start3=1 then exit;
Button1.Color:=$FF0011;
Start3:=1;
end;           

Для надёжности, используется первое событие формы onShow, то есть когда форма гарантированно прогрузилась. Событие onCreate имеет нюансы, оно происходит, когда форма ещё не дорисована, и если в дочерней форме в этом событии например менять некоторые параметры формы, то можно словить ошибку.

Добавлено спустя 8 минут 8 секунд:
Когда писал цвет $FF0011 то ожидал получить красную кнопку, а получилась синяя. Выходит, что в лазарусе цветовое пространство не RGB, а BGR.
Сквозняк
энтузиаст
 
Сообщения: 1109
Зарегистрирован: 29.06.2006 22:08:32

Re: Lazarus, LCL и кроссплатформенная разработка

Сообщение Vadim » 10.05.2022 06:34:22

Aleks69 писал(а):В менеджере пакетов Astra есть только libQt4Pas

В таком случае, это для Qt версии 4, т.е. собирать надо:
Код: Выделить всё
sudo make bigide LCL_PLATFORM=qt

или для пересборки уже в самом Lazarus'е выбрать из выпадающего списка "Библиотека виджетов LCL" - Qt.
У Astra там с Qt'шками какая то странная мешанина - есть и 4 версия и 5-я. Я полагаю, они это делают специально для поддержки совместимости со специальными версиями (в которых Qt5, видимо, отсутствует).
Можно попробовать взять готовый пакет Qt5pas из Debian и установить его с помощью штатных средств Astr'ы:
http://ftp.de.debian.org/debian/pool/ma ... _amd64.deb
Несколько лет назад я Astr'у одно время использовал и поскольку в ней некоторые нужные мне пакеты отсутствовали, приходилось брать из Debian. Результат заранее предсказать трудно. Одни пакеты спокойно устанавливаются и работают, другие - нет. Для Qt5pas велика вероятность успешной установки. Кроме того, именно пакет можно и вовсе не устанавливать, а выковырять оттуда библиотеку и симлинки, и скопировать их в каталог, где лежат Qt-шные библиотеки. Оболочка "mc" это позволяет спокойно делать (см. рис. 1).
qt5_3.png


Добавлено спустя 12 минут 41 секунду:
Сквозняк писал(а):Когда писал цвет $FF0011 то ожидал получить красную кнопку, а получилась синяя. Выходит, что в лазарусе цветовое пространство не RGB, а BGR.

Так и должно быть. В представлении процессора 1-ый разряд идёт сзади, а вовсе не на первом месте. ;-)
Можно было сделать так:
Код: Выделить всё
Button1.Color:=clRed

тогда бы ожидание не было обмануто...
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Lazarus, LCL и кроссплатформенная разработка

Сообщение Aleks69 » 10.05.2022 14:37:29

> Можно попробовать взять готовый пакет Qt5pas из Debian и установить его с помощью штатных средств Astr'ы:

Добрый день! Возможно, здесь не лучшее место для ликбеза по Linux, но все, где еще лучше спросить, чем у людей, которые в "теме" и по Lazarus.
Скажите, а если просто поместить в usr/lib libQt5Pas.so.1 ( libQt5Pas.so, libQt4Pas.so) это обеспечивает нормальный доступ к библиотекам? Симлинки не нужны? С libQt4Pas.so я вроде так и делал. Как-то болше уверенности, что достаточно в случае необходимости удалить файл, и никаких хвостов не остается.

Vadim, спасибо за пакет Qt5pas из Debian, сегодня попробую сборку с ним и LCL_PLATFORM=qt5.

И еще, уважаемые участники. Как вы думаете, вот у меня есть собранный Lazarus в одноименной папке. Я переименовываю ее в Lazarus1, а в новой Lazarus собираю из тех же иходников с LCL_PLATFORM=qt5. Мне кажется, проблем быть не должно, я ведь Lazarus ставлю не из пакета, максимум, какие могут быть пересечения, это по каталогу настроек Lazarus. Иначе говоря, первоначально собранный Lazarus можно не удалять? А может, можно просто пересобрать Lazarus из самой среды, как кажется здесь уже советовали?
Aleks69
новенький
 
Сообщения: 35
Зарегистрирован: 29.03.2009 14:25:01

Re: Lazarus, LCL и кроссплатформенная разработка

Сообщение Vadim » 10.05.2022 15:31:24

Aleks69 писал(а):Скажите, а если просто поместить в usr/lib libQt5Pas.so.1 ( libQt5Pas.so, libQt4Pas.so) это обеспечивает нормальный доступ к библиотекам? Симлинки не нужны?

Можете спокойно так и делать. Как я уже писал ранее, при распространении своей готовой проги по другим компьютерам-клиентам, я просто копировал библиотеку, какая-либо специальная установка не требуется.
Обращаю Ваше внимание! В предыдущем моём посте, на скриншоте, те названия, которые начинаются с символа "@" - это симлинки. То что без "@" - это библиотека. Чтобы Вам не париться с симлинками, библиотеку "libQt5Pas.so.1.2.6" можно просто переименовать в "libQt5Pas.so.1" и копировать только её одну.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Lazarus, LCL и кроссплатформенная разработка

Сообщение Aleks69 » 10.05.2022 22:17:33

Попробовал:

1. Собрать с libQt5Pas.so.1 и LCL_PLATFORM=qt5.
2. К собранному собранному ранее, с libQt4Pas.so.1 и LCL_PLATFORM=qt Lazarus просто доложить в usr/lib libQt5Pas.so.1.

В обоих случаях поведение полученной среды по сути одинаково. Для GTK2 или QT проект собирается без проблем.

Стоит поставить в свойствах проекта QT5 - начинаются странности. Первая сборка всегда с ошибкой компоновки.
При этом, в окне сообщений только одно предупреждение: Warning: linker: /usr/bin/Id: cannot find -IQt5Pas.

Если перед этим собрать для QT, то потом собирается и для QT5. Но длина файла, по-моему, совпадает.

Вот такие дела. Похоже, в моем сетапе сборка для GTK2 - "наше все". И, возможно, с осторожностью, для просто QT.
Aleks69
новенький
 
Сообщения: 35
Зарегистрирован: 29.03.2009 14:25:01

Re: Lazarus, LCL и кроссплатформенная разработка

Сообщение Vadim » 11.05.2022 02:40:48

Aleks69 писал(а):Warning: linker: /usr/bin/Id: cannot find -IQt5Pas.

Лежит ли Ваша библиотека libQt5Pas в том месте, где компилятор FreePascal ожидает его увидеть?
(проверяем здесь: файл /etc/fpc.cfg, ключ - "-Fl").
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Lazarus, LCL и кроссплатформенная разработка

Сообщение Сквозняк » 11.05.2022 04:32:51

Aleks69 писал(а):Стоит поставить в свойствах проекта QT5 - начинаются странности.


Пятых кутей несколько штук и появлялись они несколько лет в разных версиях дистрибутивов линукса. Часть дистрибутивов раньше снялась с поддержки, чем в репозитории завезли последние пятые кути. Между версиями есть разница, а в свойствах проекта нельзя выбрать нужную версию пятых кутей, там одни пятые, хз с какой поддержкой всех версий. То есть надо тестировать разные версии лазарусов, libQt5Pas и как они ложатся на разные версии пятых кутей в системе. В общем, дурдом.
Сквозняк
энтузиаст
 
Сообщения: 1109
Зарегистрирован: 29.06.2006 22:08:32

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 31

Рейтинг@Mail.ru
cron