Sign in Join
Wiki copytemporary

Qt5 Interface/ru: what changed

Revision 3 to 4. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11*(Qt only)*
22
33## Введение
44
55Этот интерфейс основан на Qt 5 (тестируется Qt 5.6.2). Для получения документации, исправлений и загрузки перейдите на [Project](http://qt-project.org/Qt) (установщик доступен на [странице загрузки 5.6.2](https://download.qt.io/new_archive/qt/5.6/5.6.2/)). Lazarus с интерфейсом Qt5 (qt5-lcl) можно использовать в Windows 32/64, Linux x32/x64/arm, macOS x64 (Cocoa). Наборы виджетов Qt5 были доступны в Lazarus, начиная со стабильной версии 1.8.
66
77> **Note:** С недавних пор российские IP стали баниться. Такова печальная реальность. Поэтому лучше используйте прокси и скачивайте [оффлайн инсталлятор](https://www.qt.io/offline-installers). Устанавливать с него необходимо при отключенном интернете и именно по той же причине
88
99Большинство современных дистрибутивов Linux имеют подходящий Qt5 в своих стандартных репозиториях, однако выпуски с долгосрочной поддержкой имеют проблемы из-за их возраста. Ubuntu 16.04 имеет слишком старый QT5.5, а 18.04 содержит проблемную версию libQt5Pas, которую необходимо заменить, см. ниже.
1010
1111------------------------------------------------------------------------
1212
1313Также подробнее об установке "с нуля" под Windows и Linux можно почитать [здесь](https://github.com/zoltanleo/fpc_lazarus_notes/blob/main/README.md#installing_qt_lazarus) (подойдет также для qt6)
1414
1515------------------------------------------------------------------------
1616
1717## Windows
1818
1919Бинарный файл *Q5Pas1.dll* доступен здесь
2020
2121- x86: <https://gitlab.com/freepascal.org/lazarus/binaries/-/raw/main/i386-win32/qt5/Qt5Pas1.dll?inline=false>
2222
2323а вот готовой 64-битной версии нет.
2424
2525Сборка основана на MinGW, поэтому вы можете использовать библиотеку MinGW Qt (например, qt-opensource-windows-x86-mingw492-5.6.2.exe).
2626
2727Если вам нужно собрать проект **cbindings**, вам понадобится **MinGW**. Вы можете использовать **MinGW** из пакета Qt (qt-opensource-windows-x86-mingw492-5.6.2.exe) — это необязательный компонент установки пакета Qt.
2828
2929### Запуск и развертывание
3030
3131Проект должен быть развернут с использованием *Q5Pas1.dll*.
3232
3333Файлы .dll Qt5, которые необходимо развернуть, см. в руководствах по Qt5: <https://doc.qt.io/qt-5/windows-deployment.html>.
3434
3535Для пакета на основе MinGW потребуется следующий набор библиотек DLL для запуска одного проекта FORM.
3636
3737Эти библиотеки DLL поставляются с пакетом Qt5 (можно найти в C:\QtQt5.6.2\5.6\mingw49_32\bin).
3838
3939
4040Qt5Core.dll
4141
4242Qt5PrintSupport.dll
4343
4444Qt5Widgets.dll
4545
4646Qt5Gui.dll
4747
4848Qt5Network.dll
4949
5050libstdc++-6.dll
5151
5252libwinpthread-1.dll
5353
5454libgcc_s_dw2-1.dll
5555
5656Для сборок, основанных на MSVC, а не на MinGW, может потребоваться другой набор dll(не Qt5). Обратите внимание, что [Qt5Pas1.dll](https://gitlab.com/freepascal.org/lazarus/binaries/-/raw/main/i386-win32/qt5/Qt5Pas1.dll?inline=false) собран для Qt5-5.6.2, но Qt5Pas1.dll можно использовать с любым Qt5 \> 5.6.2.
5757
5858## Linux
5959
6060### Lazarus
6161
6262![Image of Qt5 selected](/wiki-images/4/46/SelectQt5.png)Lazarus «из коробки» в Linux использует и создает приложения для GTK2. Он не помечен как имеющий зависимость от Qt5, поэтому, если вы хотите создавать приложения Qt5 или собирать версию Lazarus для Qt5, вам, вероятно, потребуется установить «libQt5Pas-dev», используя репозиторий вашего дистрибутива:
6363
6464- Fedora, Mageia - sudo dnf install qt5pas-devel \<enter\>
6565- Ubuntu, Debian — sudo apt install libqt5pas-dev \<enter\>
6666
6767это добавит необходимые библиотеки Qt5 в качестве зависимостей, обычно около 50 МБ в системе, в которой нет существующих потребностей Qt5. Если вы хотите использовать версию Lazarus для Qt5, выполните сборку из исходного кода с помощью такой команды, как
6868
69-` make bigide LCL_PLATFORM=qt5 <enter>`
69+```text
70+ make bigide LCL_PLATFORM=qt5 <enter>
71+```
7072
7173но обратите внимание, что по умолчанию GTK2 Lazarus с удовольствием создаст для вас приложения Qt5.
7274
7375В Lazarus, чтобы выбрать сборку приложения Qt5, сделайте так: Projects --\> ProjectOptions --\> Additions and Overrides, нажмите Set "LCLWidgetType" и выберите Qt5 для текущего режима сборки. А еще лучше добавить специальный режим сборки для Qt5, может быть, релиз и отладку.
7476
7577> **Note:** если вы устанавливаете Lazarus, используя версию Lazarus вашего дистрибутива, вам может потребоваться специально запросить компоненты Qt5 LCL. Если вы устанавливаете из исходного кода, вы получите намного больше с самого начала.
7678
7779Не забудьте, что при релизе вашего приложения оно должно быть помечено как зависимое от libqt5pas1.
7880
7981### libqt5pas
8082
8183*libqt5pas* — это библиотека, связывающая Qt5 и ваше приложение Lazarus. Более новые дистрибутивы (U20.04, Debian Buster и т.д.) имеют рабочие версии, доступные в их репозиториях. Отметьте свое приложение как зависимое от libqt5pas1 и все будет в порядке. Вам, как разработчику, использующему Qt5, также понадобится libqt5pas-dev, как упоминалось выше.
8284
8385> **Note:** если вы используете версию Lazarus более позднюю, чем 2.2.0, вам (и вашим конечным пользователям) потребуется libQt5Pas выше или равной 1.2.10. Дистрибутивам потребуется некоторое время, чтобы обновить версию, которую они распространяют, поэтому либо создайте свою собственную, либо используйте неофициальные <https://github.com/davidbannon/libqt5pas/releases/latest> debs и rpms, как указано ниже. Помните, что вашим конечным пользователям тоже нужна версия 1.2.10!
8486
8587Использование вашего репозитория дистрибутивов -
8688
8789- Fedora, Mageia - sudo dnf install qt5pas\<enter\>
8890- Ubuntu, Debian - sudo apt install libqt5pas1 \<enter\>
8991
9092#### Проблема с версией?
9193
9294Версия libQt5Pas вызовет проблемы у следующих людей, помните, что это влияет на вас, как на разработчика, и на ваших конечных пользователей.
9395
9496- Пользователи очень старых дистрибутивов Linux, таких как Ubuntu 16.04 - жаль, нет решения, не используйте Qt5, если вам нужна поддержка таких операционных систем.
9597- Старые дистрибутивы Linux, такие как U18.04, официально поддерживаются до 2023 года, но используют неподходящий libQt5Pas. Вы увидите сбой, если ваше приложение использует TMemo. Замените существующий libQt5Pas.
9698- Текущие дистрибутивы LTS, такие как 20.04 (и, возможно, 22.04, Debian Bullseye и т. д.), будут иметь libQt5Pas более ранней, чем 1.2.10, и это проблема, если вы используете версию Lazarus более позднюю, чем 2.2.0. Опять же, вы можете заменить существующий libQt5Pas
9799
98100**Замена своего libQt5Pas?**
99101
100102Два варианта: используйте Deb- или RPM-пакеты из <https://github.com/davidbannon/libqt5pas/releases/latest> — вы должны убедиться, что ваш менеджер пакетов не возражает, или даже заменить ваш новый сияющий файл другим из предпочитаемого дистрибутива. Пишите на форуме, если вам нужно что-то кроме 64-битных Deb и RPM (Signing, 32bit, Pacman и т.д.). Установите, например, с помощью
101103
102-` sudo apt install ./libqt5pas1_2.10-0_amd64.deb <enter> `
104+```text
105+ sudo apt install ./libqt5pas1_2.10-0_amd64.deb <enter>
106+```
103107
104108Как разработчику, вам также понадобится dev-пакет, удалите существующий, если он есть.
105109
106110Во-вторых, в исходниках Lazarus есть код для создания собственной библиотеки, вам понадобится gcc и несколько других вещей, задокументированных в README.txt. Затем скопируйте новую библиотеку поверх существующей libQt5Pas1 (конечно, как root)
107111
108112Примечание 1 Эти два пакета deb созданы для Ubuntu 18.04 (или более поздней версии), они совершенно не помогут в Ubuntu 16.04, так как его основные библиотеки Qt5 слишком устарели.
109113
110114Примечание 2 Ubuntu будет постоянно перезаписывать эту пару обновленных пакетов с помощью инструмента «автоматического обновления». Вы должны занести пакеты в черный список, чтобы средство автоматического обновления не испортило вашу хорошую работу.
111115
112116### Системы, использующие Wayland
113117
114118Некоторые дистрибутивы используют Wayland по умолчанию (например, Fedora по умолчанию с рабочим столом GNOME), а QT5 не работает с Wayland. Вы получите сообщение вида:
115119
116120 QSocketNotifier: Can only be used with threads started with QThread
117121 [FORMS.PP] ExceptionOccurred
118122 ....
119123
120124Выйдите из системы, на экране входа щелкните маленький значок шестеренки, выберите «GNOME on XOrg». Войдите снова.
121125
122126Есть, видимо, плагин Wayland для Qt5, для смелых - <https://wayland.freedesktop.org/qt5.html>
123127
124128### Цвета Qt5
125129
126130В Linux иногда приложения Qt5 наследуют используемые цвета от рабочего стола/ОС. Однако это не всегда работает и, по-видимому, зависит от дистрибутива/рабочего стола. С нынешней модой на темные темы более надежным подходом является использование qt5ct. qt5ct присутствует в репозитории большинства дистрибутивов, и его можно быстро и легко установить. Когда вы запускаете его, он открывается на вкладке «Внешний вид», для темной темы выберите «Палитра = Пользовательская», «Цветовая схема» = «Темная». Нажмите «Применить» и «ОК», чтобы закрыть приложение.
127131
128132![](/wiki-images/6/6d/Qt5ct_dark.png)
129133
130134Вы заметили сообщение вверху «Приложение настроено неправильно»? Его беспокоит то, что вы не добавили настройку переменной среды, которая укажет вашему приложению использовать только что установленные цвета. Вы можете задать его только для одного приложения, установив его в командной строке приложения:
131135
132136 QT_QPA_PLATFORMTHEME=qt5ct myapplication
133137
134138Это может быть добавлено в файл рабочего стола приложения или, возможно, вы отредактируете пункт меню. Альтернативой является добавление его в /etc/environment (очевидно, без имени приложения), чтобы оно автоматически устанавливалось для всех приложений, вам нужно выйти из системы и снова войти. Добавление записи в собственный .bashrc не совсем уместно, поскольку приложения с графическим интерфейсом, запускаемые, например, из меню, не будут об этом уведомлены.
135139
136140> **Note:** В Debian при установке qt5ct автоматически добавляется QT_QPA_PLATFORMTHEME в переменные среды.
137141
138142### Почему Qt5, а не GTK?
139143
140144Хороший вопрос! Большинство приложений Linux Lazarus создаются с использованием GTK2 по умолчанию. Различные дистрибутивы Linux предоставляют все меньше и меньше приложений GTK2, обычно «обновляя» их до GTK3. Тем не менее, интерфейс Lazarus GTK3 все еще нуждается в некоторой доработке, и он еще не готов для производственных систем. До конца 2019 года это не имело большого значения, GTK2 работает нормально. Но Ubuntu19.10 не имеет библиотек GTK2, установленных по умолчанию, и Xfce объявил, что его следующий выпуск будет свободен от GTK2, по-видимому, многие дистрибутивы хотят исключить GTK2 из своих наборов по умолчанию. Хотя вы все еще можете установить GTK2, он довольно большой....
141145
142146Qt5 — очевидное решение, оно уже установлено в таких дистрибутивах, как Fedora 30 plus, это относительно легкое дополнение к Ubuntu, всего 48 мегабайт по сравнению с 445 мегабайтами GTK2. Если вы пометите свое приложение как зависимое от libqt5pas, оно будет установлено одновременно с другими файлами qt5, если это необходимо. Ручная установка libqt5pas с помощью вашего менеджера пакетов (при условии, что он разрешает зависимости!) также будет работать.
143147
144148Очевидно, что дистрибутивы на основе Qt, использующие Plasma или KDE в качестве рабочего стола, потребуют только *libqt5pas*.
145149
146150## macOS (64-бит)
147151
148152Следующие шаги были протестированы с macOS 10.13.6 (High Sierra), инструментами командной строки Xcode 10.0.0 (Xcode не требуется), Lazarus 1.8.4 и минимальной версией Qt 5.6.2 (Qt 5.12.xx тоже работает без проблем).
149153
150154После установки Qt 5.6.2 (см. выше) откройте окно терминала и выполните следующие команды (пути могут отличаться):
151155
152156 export LazarusDir=/Developer/Lazarus
153157 export QtDir=~/Qt5.6.2
154158 cd $LazarusDir/lcl/interfaces/qt5/cbindings
155159 export PATH=$QtDir/5.6/clang_64/bin:$PATH
156160 qmake
157161
158162Если **qmake** завершается со следующей ошибкой:
159163
160164 xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
161165
162166это **не означает**, что вы должны установить Xcode. См. обходной путь [Qt без Xcode](https://gist.github.com/shoogle/750a330c851bd1a924dfe1346b0b4a08) и попробуйте снова запустить `qmake`. (Зависимость от Xcode, кажется, исправлена ​​в Qt 5.9.4 или, возможно, ранее.)
163167
164168Продолжайте процесс сборки с помощью следующих команд:
165169
166170 make
167171 make install
168172
169173Может быть полезно добавить символические ссылки в Qt5Pas.framework и другие файлы *.framework (чтобы не требовалось никаких изменений в пути):
170174
171175 cd /Library/Frameworks/
172176 sudo ln -s $QtDir/5.6/clang_64/lib/*.framework .
173177
174178Помните, что Qt5 является 64-битным, поэтому в Lazarus в разделеTools - Options - Environment вам нужно изменить исполняемый файл компилятора с `/usr/local/bin/ppc386` на `/usr/local/bin/ppcx64`. При использовании ppc386 вы позже получите следующие ошибки при компиляции ваших проектов Lazarus:
175179
176180 Error: linker: Undefined symbols for architecture i386:
177181 Error: linker: "_QAbstractButton_click", referenced from:
178182 [...]
179183 ld: symbol(s) not found for architecture i386
180184
181185Наконец, создайте новый проект Lazarus (или откройте существующий), откройте Project - Project options - Compiler options - Additions and overrides, установите `LCLWidgetType:=qt5`. Теперь вы сможете скомпилировать свой проект с набором виджетов Qt5.
182186
183187## Пример проекта
184188
185189См. [Первые шаги с интерфейсом Lazarus Qt5](https://tondrej.blogspot.com/2018/04/first-steps-with-lazarus-qt5-interface.html) для примера проекта для Win32, Win64, macOS (64-разрядная версия) и Linux (64 бит).
186190
187191---
188192*From the Free Pascal wiki, page "Qt5 Interface/ru", as it stood on 2022-12-20 after a change by Zoltanleo, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history