Qt5 Interface/ru
│
English (en) │
русский (ru) │
Эта статья относится только к Qt5 widgetset.
См. также: Multiplatform Programming Guide
Введение
Этот интерфейс основан на Qt 5 (тестируется Qt 5.6.2). Для получения документации, исправлений и загрузки перейдите на Project (установщик доступен на странице загрузки 5.6.2). Lazarus с интерфейсом Qt5 (qt5-lcl) можно использовать в Windows 32/64, Linux x32/x64/arm, macOS x64 (Cocoa). Наборы виджетов Qt5 были доступны в Lazarus, начиная со стабильной версии 1.8.
Большинство современных дистрибутивов Linux имеют подходящий Qt5 в своих стандартных репозиториях, однако выпуски с долгосрочной поддержкой имеют проблемы из-за их возраста. Ubuntu 16.04 имеет слишком старый QT5.5, а 18.04 содержит проблемную версию libQt5Pas, которую необходимо заменить, см. ниже.
Также подробнее об установке "с нуля" под Windows и Linux можно почитать здесь (подойдет также для qt6)
Windows
Бинарный файл Q5Pas1.dll доступен здесь
а вот готовой 64-битной версии нет.
Сборка основана на MinGW, поэтому вы можете использовать библиотеку MinGW Qt (например, qt-opensource-windows-x86-mingw492-5.6.2.exe).
Если вам нужно собрать проект cbindings, вам понадобится MinGW. Вы можете использовать MinGW из пакета Qt (qt-opensource-windows-x86-mingw492-5.6.2.exe) — это необязательный компонент установки пакета Qt.
Запуск и развертывание
Проект должен быть развернут с использованием Q5Pas1.dll.
Файлы .dll Qt5, которые необходимо развернуть, см. в руководствах по Qt5: https://doc.qt.io/qt-5/windows-deployment.html.
Для пакета на основе MinGW потребуется следующий набор библиотек DLL для запуска одного проекта FORM.
Эти библиотеки DLL поставляются с пакетом Qt5 (можно найти в C:\QtQt5.6.2\5.6\mingw49_32\bin).
- Qt5Core.dll
- Qt5PrintSupport.dll
- Qt5Widgets.dll
- Qt5Gui.dll
- Qt5Network.dll
- libstdc++-6.dll
- libwinpthread-1.dll
- libgcc_s_dw2-1.dll
Для сборок, основанных на MSVC, а не на MinGW, может потребоваться другой набор dll(не Qt5). Обратите внимание, что Qt5Pas1.dll собран для Qt5-5.6.2, но Qt5Pas1.dll можно использовать с любым Qt5 > 5.6.2.
Linux
Lazarus
Lazarus «из коробки» в Linux использует и создает приложения для GTK2. Он не помечен как имеющий зависимость от Qt5, поэтому, если вы хотите создавать приложения Qt5 или собирать версию Lazarus для Qt5, вам, вероятно, потребуется установить «libQt5Pas-dev», используя репозиторий вашего дистрибутива:
- Fedora, Mageia - sudo dnf install qt5pas-devel <enter>
- Ubuntu, Debian — sudo apt install libqt5pas-dev <enter>
это добавит необходимые библиотеки Qt5 в качестве зависимостей, обычно около 50 МБ в системе, в которой нет существующих потребностей Qt5. Если вы хотите использовать версию Lazarus для Qt5, выполните сборку из исходного кода с помощью такой команды, как
make bigide LCL_PLATFORM=qt5 <enter>
но обратите внимание, что по умолчанию GTK2 Lazarus с удовольствием создаст для вас приложения Qt5.
В Lazarus, чтобы выбрать сборку приложения Qt5, сделайте так: Projects --> ProjectOptions --> Additions and Overrides, нажмите Set "LCLWidgetType" и выберите Qt5 для текущего режима сборки. А еще лучше добавить специальный режим сборки для Qt5, может быть, релиз и отладку.
Не забудьте, что при релизе вашего приложения оно должно быть помечено как зависимое от libqt5pas1.
libqt5pas
libqt5pas — это библиотека, связывающая Qt5 и ваше приложение Lazarus. Более новые дистрибутивы (U20.04, Debian Buster и т.д.) имеют рабочие версии, доступные в их репозиториях. Отметьте свое приложение как зависимое от libqt5pas1 и все будет в порядке. Вам, как разработчику, использующему Qt5, также понадобится libqt5pas-dev, как упоминалось выше.
Использование вашего репозитория дистрибутивов -
- Fedora, Mageia - sudo dnf install qt5pas<enter>
- Ubuntu, Debian - sudo apt install libqt5pas1 <enter>
Проблема с версией?
Версия libQt5Pas вызовет проблемы у следующих людей, помните, что это влияет на вас, как на разработчика, и на ваших конечных пользователей.
- Пользователи очень старых дистрибутивов Linux, таких как Ubuntu 16.04 - жаль, нет решения, не используйте Qt5, если вам нужна поддержка таких операционных систем.
- Старые дистрибутивы Linux, такие как U18.04, официально поддерживаются до 2023 года, но используют неподходящий libQt5Pas. Вы увидите сбой, если ваше приложение использует TMemo. Замените существующий libQt5Pas.
- Текущие дистрибутивы LTS, такие как 20.04 (и, возможно, 22.04, Debian Bullseye и т. д.), будут иметь libQt5Pas более ранней, чем 1.2.10, и это проблема, если вы используете версию Lazarus более позднюю, чем 2.2.0. Опять же, вы можете заменить существующий libQt5Pas
Замена своего libQt5Pas?
Два варианта: используйте Deb- или RPM-пакеты из https://github.com/davidbannon/libqt5pas/releases/latest — вы должны убедиться, что ваш менеджер пакетов не возражает, или даже заменить ваш новый сияющий файл другим из предпочитаемого дистрибутива. Пишите на форуме, если вам нужно что-то кроме 64-битных Deb и RPM (Signing, 32bit, Pacman и т.д.). Установите, например, с помощью
sudo apt install ./libqt5pas1_2.10-0_amd64.deb <enter>
Как разработчику, вам также понадобится dev-пакет, удалите существующий, если он есть.
Во-вторых, в исходниках Lazarus есть код для создания собственной библиотеки, вам понадобится gcc и несколько других вещей, задокументированных в README.txt. Затем скопируйте новую библиотеку поверх существующей libQt5Pas1 (конечно, как root)
Примечание 1 Эти два пакета deb созданы для Ubuntu 18.04 (или более поздней версии), они совершенно не помогут в Ubuntu 16.04, так как его основные библиотеки Qt5 слишком устарели.
Примечание 2 Ubuntu будет постоянно перезаписывать эту пару обновленных пакетов с помощью инструмента «автоматического обновления». Вы должны занести пакеты в черный список, чтобы средство автоматического обновления не испортило вашу хорошую работу.
Системы, использующие Wayland
Некоторые дистрибутивы используют Wayland по умолчанию (например, Fedora по умолчанию с рабочим столом GNOME), а QT5 не работает с Wayland. Вы получите сообщение вида:
QSocketNotifier: Can only be used with threads started with QThread [FORMS.PP] ExceptionOccurred ....
Выйдите из системы, на экране входа щелкните маленький значок шестеренки, выберите «GNOME on XOrg». Войдите снова.
Есть, видимо, плагин Wayland для Qt5, для смелых - https://wayland.freedesktop.org/qt5.html
Цвета Qt5
В Linux иногда приложения Qt5 наследуют используемые цвета от рабочего стола/ОС. Однако это не всегда работает и, по-видимому, зависит от дистрибутива/рабочего стола. С нынешней модой на темные темы более надежным подходом является использование qt5ct. qt5ct присутствует в репозитории большинства дистрибутивов, и его можно быстро и легко установить. Когда вы запускаете его, он открывается на вкладке «Внешний вид», для темной темы выберите «Палитра = Пользовательская», «Цветовая схема» = «Темная». Нажмите «Применить» и «ОК», чтобы закрыть приложение.
Вы заметили сообщение вверху «Приложение настроено неправильно»? Его беспокоит то, что вы не добавили настройку переменной среды, которая укажет вашему приложению использовать только что установленные цвета. Вы можете задать его только для одного приложения, установив его в командной строке приложения:
QT_QPA_PLATFORMTHEME=qt5ct myapplication
Это может быть добавлено в файл рабочего стола приложения или, возможно, вы отредактируете пункт меню. Альтернативой является добавление его в /etc/environment (очевидно, без имени приложения), чтобы оно автоматически устанавливалось для всех приложений, вам нужно выйти из системы и снова войти. Добавление записи в собственный .bashrc не совсем уместно, поскольку приложения с графическим интерфейсом, запускаемые, например, из меню, не будут об этом уведомлены.
Почему Qt5, а не GTK?
Хороший вопрос! Большинство приложений Linux Lazarus создаются с использованием GTK2 по умолчанию. Различные дистрибутивы Linux предоставляют все меньше и меньше приложений GTK2, обычно «обновляя» их до GTK3. Тем не менее, интерфейс Lazarus GTK3 все еще нуждается в некоторой доработке, и он еще не готов для производственных систем. До конца 2019 года это не имело большого значения, GTK2 работает нормально. Но Ubuntu19.10 не имеет библиотек GTK2, установленных по умолчанию, и Xfce объявил, что его следующий выпуск будет свободен от GTK2, по-видимому, многие дистрибутивы хотят исключить GTK2 из своих наборов по умолчанию. Хотя вы все еще можете установить GTK2, он довольно большой....
Qt5 — очевидное решение, оно уже установлено в таких дистрибутивах, как Fedora 30 plus, это относительно легкое дополнение к Ubuntu, всего 48 мегабайт по сравнению с 445 мегабайтами GTK2. Если вы пометите свое приложение как зависимое от libqt5pas, оно будет установлено одновременно с другими файлами qt5, если это необходимо. Ручная установка libqt5pas с помощью вашего менеджера пакетов (при условии, что он разрешает зависимости!) также будет работать.
Очевидно, что дистрибутивы на основе Qt, использующие Plasma или KDE в качестве рабочего стола, потребуют только libqt5pas.
macOS (64-бит)
Следующие шаги были протестированы с macOS 10.13.6 (High Sierra), инструментами командной строки Xcode 10.0.0 (Xcode не требуется), Lazarus 1.8.4 и минимальной версией Qt 5.6.2 (Qt 5.12.xx тоже работает без проблем).
После установки Qt 5.6.2 (см. выше) откройте окно терминала и выполните следующие команды (пути могут отличаться):
export LazarusDir=/Developer/Lazarus export QtDir=~/Qt5.6.2 cd $LazarusDir/lcl/interfaces/qt5/cbindings export PATH=$QtDir/5.6/clang_64/bin:$PATH qmake
Если qmake завершается со следующей ошибкой:
xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
это не означает, что вы должны установить Xcode. См. обходной путь Qt без Xcode и попробуйте снова запустить qmake
. (Зависимость от Xcode, кажется, исправлена в Qt 5.9.4 или, возможно, ранее.)
Продолжайте процесс сборки с помощью следующих команд:
make make install
Может быть полезно добавить символические ссылки в Qt5Pas.framework и другие файлы *.framework (чтобы не требовалось никаких изменений в пути):
cd /Library/Frameworks/ sudo ln -s $QtDir/5.6/clang_64/lib/*.framework .
Помните, что Qt5 является 64-битным, поэтому в Lazarus в разделеTools - Options - Environment вам нужно изменить исполняемый файл компилятора с /usr/local/bin/ppc386
на /usr/local/bin/ppcx64
. При использовании ppc386 вы позже получите следующие ошибки при компиляции ваших проектов Lazarus:
Error: linker: Undefined symbols for architecture i386: Error: linker: "_QAbstractButton_click", referenced from: [...] ld: symbol(s) not found for architecture i386
Наконец, создайте новый проект Lazarus (или откройте существующий), откройте Project - Project options - Compiler options - Additions and overrides, установите LCLWidgetType:=qt5
. Теперь вы сможете скомпилировать свой проект с набором виджетов Qt5.
Пример проекта
См. Первые шаги с интерфейсом Lazarus Qt5 для примера проекта для Win32, Win64, macOS (64-разрядная версия) и Linux (64 бит).
Other Interfaces
- Lazarus known issues (things that will never be fixed) - A list of interface compatibility issues
- Win32/64 Interface - The Windows API (formerly Win32 API) interface for Windows 95/98/Me/2000/XP/Vista/10, but not CE
- Windows CE Interface - For Pocket PC and Smartphones
- Carbon Interface - The Carbon 32 bit interface for macOS (deprecated; removed from macOS 10.15)
- Cocoa Interface - The Cocoa 64 bit interface for macOS
- Qt Interface - The Qt4 interface for Unixes, macOS, Windows, and Linux-based PDAs
- Qt5 Interface - The Qt5 interface for Unixes, macOS, Windows, and Linux-based PDAs
- GTK1 Interface - The gtk1 interface for Unixes, macOS (X11), Windows
- GTK2 Interface - The gtk2 interface for Unixes, macOS (X11), Windows
- GTK3 Interface - The gtk3 interface for Unixes, macOS (X11), Windows
- fpGUI Interface - Based on the fpGUI library, which is a cross-platform toolkit completely written in Object Pascal
- Custom Drawn Interface - A cross-platform LCL backend written completely in Object Pascal inside Lazarus. The Lazarus interface to Android.
Platform specific Tips
- Android Programming - For Android smartphones and tablets
- iPhone/iPod development - About using Objective Pascal to develop iOS applications
- FreeBSD Programming Tips - FreeBSD programming tips
- Linux Programming Tips - How to execute particular programming tasks in Linux
- macOS Programming Tips - Lazarus tips, useful tools, Unix commands, and more...
- WinCE Programming Tips - Using the telephone API, sending SMSes, and more...
- Windows Programming Tips - Desktop Windows programming tips
Interface Development Articles
- Carbon interface internals - If you want to help improving the Carbon interface
- Windows CE Development Notes - For Pocket PC and Smartphones
- Adding a new interface - How to add a new widget set interface
- LCL Defines - Choosing the right options to recompile LCL
- LCL Internals - Some info about the inner workings of the LCL
- Cocoa Internals - Some info about the inner workings of the Cocoa widgetset