Qt (Русский)
Qt — кроссплатформенный набор инструментов и виджетов для создания приложений, который использует стандартный язык программирования C++, а также специальный генератор кода (Meta Object Compiler, или moc) вместе с набором макросов, расширяющих возможности языка. Набор предоставляет широкие возможности по разработке приложений. Среди наиболее важных:
- Работа на основных компьютерных платформах и операционных системах, а также на некоторых мобильных платформах.
- Обширная поддержка возможностей интернационализации.
- Полнофункциональная библиотека с поддержкой SQL баз данных, парсинга XML, управления потоками, сети и унифицированный кроссплатформенный программный интерфейс (API) для работы с файлами.
На основе фреймворка Qt развивается сообщество и программное обеспечение KDE. Qt лежит в основе других важных проприетарных и открытых программных проектов, таких как VLC, VirtualBox, Mathematica и многих других.
Установка
Qt 6.x и 5.x доступны в официальных репозиториях. Старые версии (4.x и 3.x) есть в AUR. Их можно установить с помощью следующих пакетов:
- Qt 6.x входит в пакет qt6-base, документация — qt6-doc.
- Qt 5.x входит в пакет qt5-base, документация — qt5-doc.
- Qt 4.x предоставляется пакетом qt4AUR, документация — qt4-docAUR.
- Qt 3.x предоставляется пакетом qt3AUR, документация — qt3-docAUR[ссылка недействительна: package not found].
Выбор набора Qt по умолчанию
С помощью qtchooserAUR[ссылка недействительна: package not found], вы можете выбирать, для какой версии Qt будут помещены исполняемые файлы (например, qmake) в /usr/bin
. По умолчанию используется Qt 5 (например, qmake-qt5).
/usr/local
, но официально это не поддерживается. Смотрите FS#51308.Используя переменные окружения
Чтобы выбрать конкретную версию Qt, вы можете создать переменную окружения QT_SELECT
: чтобы выбрать Qt n, установите QT_SELECT=n
.
Используя файл конфигурации
Вы можете выбрать версию набора Qt по умолчанию, создав символическую ссылку ~/.config/qtchooser/default.conf
на один из файлов .conf в каталоге /etc/xdg/qtchooser
. Например, чтобы выбрать Qt 4, создайте ссылку на /etc/xdg/qtchooser/4.conf
:
$ ln -s/etc/xdg/qtchooser/4.conf
~/.config/qtchooser/default.conf
Настройка
Стили в Qt 5
Qt 5 выбирает стиль, основываясь на текущей среде рабочего стола:
- В KDE Plasma он использует текущий выбранный стиль Qt. Это можно настроить через Параметры системы (systemsettings), раздел Внешний вид > Оформление приложений.
- Для Cinnamon, GNOME, MATE, LXDE, Xfce он использует GTK (QGtkStyle).
- В других средах рабочего стола используется Fusion.
Если вы хотите принудительно установить внешний вид и поведение интерфейса приложений Qt 5, установите переменную окружения QT_STYLE_OVERRIDE
с названием желаемого стиля. В частности, для GTK пропишите gtk2
(не забудьте установить плагины, требуемые для нужного вам стиля). Приложения Qt 5 также поддерживают опцию -style
.
В состав Qt 5 входят стили Fusion и Windows. Также можно установить дополнительные стили:
- Breeze — Стиль Plasma Desktop.
- Oxygen — Стиль KDE Oxygen.
- Lightly — Форк Breeze, который стремится выглядеть современно и минималистично.
- https://github.com/Luwx/Lightly || lightly-gitAUR[ссылка недействительна: package not found]
- QtCurve — Гибкая в настройке тема рабочего стола с поддержкой приложений GTK и Qt.
- https://invent.kde.org/system/qtcurve || qtcurve-qt5[ссылка недействительна: package not found]
- Adwaita-Qt — Стиль для Qt-приложений, выглядящий как GNOME Shell.
- Qt style plugins — Дополнительные плагины для Qt 5: GTK, Cleanlooks, Motif, Plastique.
- Kvantum — Настраиваемый, основанный на SVG движок тем с множеством встроенных стилей. Также включает в себя имитацию некоторых популярных тем GTK: Adapta, Arc, Ambiance
Стили в Qt 4
Qt 4 пытается имитировать поведение текущей среды рабочего стола, если не столкнётся с какими-либо проблемами или жёстко закодированными настройками.
- В KDE Plasma он использует текущий выбранный стиль Qt. Это можно настроить через Параметры системы (systemsettings), раздел Внешний вид > Оформление приложений.
- Для Cinnamon, GNOME, Xfce он использует GTK (QGtkStyle).
- В других средах рабочего стола используется Windows.
Для тех, кто хочет изменить внешний вид и оформление приложений Qt 4, в пакете qt4AUR есть графический инструмент Qt Configuration (qtconfig-qt4). Он предлагает простой интерфейс для настройки внешнего вида приложений Qt 4, в том числе стиля, цветов, шрифтов и некоторых других параметров.
Qt хранит все свои настройки в файле /etc/xdg/Trolltech.conf
(общесистемный) или ~/.config/Trolltech.conf
(пользовательский). В этом файле довольно сложно ориентироваться, так как он содержит много информации, не относящейся к внешнему виду, но для любых изменений вы можете просто добавить в конец файла и таким образом перезаписать все предыдущие значения (убедитесь, что добавляете свои изменения в секцию [Qt]
).
Например, чтобы изменить тему на QtCurve, добавьте:
~/.config/Trolltech.conf
... [Qt] style=QtCurve
В состав Qt 4 входят стили CDE, Cleanlooks, GTK, Motif, Plastique, Windows. Также можно установить дополнительные стили:
- Breeze — Стиль Plasma Desktop.
- https://invent.kde.org/plasma/breeze || breeze-kde4AUR[ссылка недействительна: package not found]
- Adwaita-Qt — Стиль для Qt-приложений, выглядящий как GNOME Shell.
Таблицы стилей Qt
Интересным способом модификации внешнего вида приложений Qt является использование таблиц стилей, которые представляют собой обычные CSS-файлы. Используя таблицы стилей, пользователь может изменить внешний вид любого виджета в приложении.
Чтобы запустить приложение, используя указанную таблицу стилей, просто передайте путь к файлу в опции -stylesheet
:
$ qt_приложение -stylesheet стиль.qss
Для получения подробной информации о таблицах стилей Qt смотрите официальную документацию или руководство. Пример таблицы стилей вы можете найти на этой странице.
GTK и Qt
Если вы используете одновременно приложения GTK и Qt, их внешний вид может не соответствовать друг другу. Способы получения согласованного внешнего вида описаны в статье Единый вид приложений GTK и Qt.
Настройка приложений Qt 5 в средах, отличных от KDE Plasma
В отличие от Qt 4, Qt 5 не поставляет утилиту qtconfig для настройки шрифтов, значков или стилей. Вместо этого он попытается использовать настройки из запущенной среды рабочего стола. В KDE Plasma или GNOME это работает хорошо, но в других менее популярных средах рабочего стола или оконных менеджерах это может привести к отсутствию значков в приложениях Qt 5. Один из способов решения этой проблемы — подделать информацию о среде рабочего стола, прописав переменную окружения XDG_CURRENT_DESKTOP=KDE
или GNOME
, а затем использовать соответствующее приложение конфигурации для выбора нужного набора значков.
Другим решением является использование qt5ct, который предоставляет Qt 5 QPA, не зависящий от среды рабочего стола, и утилиту настройки. После установки запустите qt5ct
и настройте стили, а затем пропишите переменную окружения QT_QPA_PLATFORMTHEME=qt5ct
, чтобы эти настройки стали применяться приложениями Qt. Также можно использовать опцию --platformtheme qt5ct
при запуске приложения Qt 5.
qt5ct-kdeAUR имеет более хорошую интеграцию с приложениями KDE, в том числе KDE QML.
Если некоторые значки отсутствуют и вы видите такие ошибки:
Icon theme "oxygen" not found. Icon theme "oxygen" not found. Error: standard icon theme "oxygen" not found!
то установите oxygen и oxygen-icons.
Разработка
Поддерживаемые платформы
Qt поддерживает большинство доступных сегодня платформ, включая даже весьма малоизвестные. Полный список поддерживаемых платформ вы можете найти в статье на Wikipedia.
Android
Прежде всего, вам понадобится установить Android SDK и NDK из AUR или через Android Studio.
Для SDK также нужен OpenJDK. Разным версиям Qt нужны разные версии, подробнее в документации.
Далее вам понадобится Qt 5 для Android. Вы можете установить его из AUR, как описано ниже, или собрать его самостоятельно, инструкции по сборке можно найти на странице в вики Qt.
В случае проблем посмотрите список известных проблем.
- android-armv7a-eabi-qt5AUR[ссылка недействительна: package not found] - armeabi-v7a
- android-aarch64-qt5AUR[ссылка недействительна: package not found] - aarch64
- android-x86-qt5AUR[ссылка недействительна: package not found] - x86
- android-x86-64-qt5AUR[ссылка недействительна: package not found] - x86_64
В качестве альтернативы можно использовать официальный установщик Qt.
Инструменты
Список официальных инструментов разработки для Qt:
- Qt Creator — Кроссплатформенная среда разработки, созданная для разработки приложений Qt.
- Qt Linguist — Набор инструментов для упрощения перевода и интернационализации приложений Qt.
- https://doc.qt.io/qt-5/qtlinguist-index.html || Qt 5: qt5-tools, Qt 4: qt4AUR
- Qt Assistant — Справочная система для чтения документации по Qt.
- https://doc.qt.io/qt-5/qtassistant-index.html || Qt 5: qt5-tools, Qt 4: qt4AUR
- Qt Designer — Инструмент для разметки графического интерфейса приложений Qt и создания форм для виджетов.
- https://doc.qt.io/qt-5/qtdesigner-manual.html || Qt 5: qt5-tools, Qt 4: qt4AUR
- Qt Quick Designer — Визуальный редактор файлов QML, поддерживающий режим WYSIWYG. Он позволяет с нуля проектировать и разрабатывать приложения и компоненты Qt Quick.
- qmlscene — Инструмент для загрузки документов QML, облегчающий разработку и отладку приложений QML.
- https://doc.qt.io/qt-5/qtquick-qmlscene.html || Qt 5: qt5-declarative, Qt 4 QML Viewer: qt4AUR
- qmake — Средство автоматизации процесса сборки приложений Qt на различных платформах, похожее на cmake, но с меньшим количеством опций и ориентированное на приложения Qt.
- https://doc.qt.io/qt-5/qmake-manual.html || Qt 5: qt5-base, Qt 4: qt4AUR
- uic — Генератор кода C++ на основе .ui-файлов.
- https://doc.qt.io/qt-5/uic.html || Qt 5: qt5-base, Qt 4: qt4AUR
- rcc — Инструмент для упаковки ресурсов (например, изображений) в приложение при сборке. По сути генерирует код на C++, содержащий данные, указанные в файле ресурсов (.qrc).
- https://doc.qt.io/qt-5/rcc.html || Qt 5: qt5-base, Qt 4: qt4AUR
- moc — Препроцессор исходных файлов, обрабатывающий расширения Qt для C++ (например, директивы механизма сигналов и слотов, RTTI, аннотации).
- https://doc.qt.io/qt-5/moc.html || Qt 5: qt5-base, Qt 4: qt4AUR
Другие языки программирования
Qt имеет привязки ко многим популярным языкам программирования. Полный список поддерживаемых языков вы можете найти на странице https://wiki.qt.io/Language_Bindings
Приведенные ниже примеры отображают окно с сообщением 'Hello world!'.
C++
- Пакет: qt5-base
- Сайт: https://www.qt.io/developers/
- Команда сборки:
g++ $(pkg-config --cflags --libs Qt 5Widgets) -fPIC -o hello hello.cpp
- Команда запуска:
./hello
hello.cpp
#include <QApplication> #include <QLabel> int main(int argc, char **argv) { QApplication app(argc, argv); QLabel hello("Hello world!"); hello.show(); return app.exec(); }
QML
- Пакет: qt5-declarative.
- Сайт: https://doc.qt.io/qt-5/qtquick-qmlscene.html
- Команда запуска:
qmlscene hello.qml
hello.qml
import QtQuick 2.3 Rectangle { id: page width: 400; height: 100 color: "lightgray" Text { id: helloText text: "Hello world!" anchors.horizontalCenter: page.horizontalCenter anchors.verticalCenter: page.verticalCenter font.pointSize: 24; font.bold: true } }
Python (PyQt)
- Пакет: python-pyqt5 — привязки Python 3.x для Qt 5
- Сайт: https://riverbankcomputing.com/software/pyqt/intro
- Команда запуска:
python hello-pyqt.py
hello-pyqt.py
import sys from PyQt5.QtWidgets import QApplication, QLabel app = QApplication(sys.argv) label = QLabel("Hello world!") label.show() sys.exit(app.exec_())
Python (PySide2)
- Пакет: pyside2AUR
- Сайт: https://wiki.qt.io/Qt_for_Python
- Команда запуска:
python hello-pyside2.py
hello-pyside2.py
import sys from PySide2.QtWidgets import QApplication, QLabel app = QApplication(sys.argv) label = QLabel("Hello world!") label.show() sys.exit(app.exec_())
C#
Смотрите QtSharp.
Решение проблем
Настройка журнала Qt
При использовании KDE и/или любой другой среды рабочего стола на основе Qt в журнал systemd может записываться много отладочной информации.
Изменить поведение можно с помощью переменной окружения QT_LOGGING_RULES
. Например, чтобы полностью отключить запись в журнал:
/etc/environment
QT_LOGGING_RULES='*=false'
Чтобы отключить только отладочные записи, используйте QT_LOGGING_RULES="*.debug=false"
.
Не применяется тема значков
Начиная с Qt 5.1, поддержка SVG переместилась в модуль. Поскольку qt5-base не зависит от qt5-svg, может случиться так, что qt5-base установлен, а qt5-svg нет. Так как SVG по умолчанию не поддерживается, значки молча пропускаются, и может показаться, что тема иконок не используется. Явная установка qt5-svg решает проблему.
Не применяется тема для приложений, запущенных от имени root
Поскольку файл темы пользователя ($XDG_CONFIG_HOME/Trolltech.conf
) не читается другими аккаунтами, выбранная тема не будет применяться к приложениям X, запущенным от имени root. Возможные решения:
- Создать символические ссылки, например
# ln -s /home/пользователь/.config/Trolltech.conf /etc/xdg/Trolltech.conf
- Настроить тему в общесистемном файле:
/etc/xdg/Trolltech.conf
- Настроить тему пользователя root
Не учитывается стиль Qt 4
Если чистые приложения Qt 4 (не KDE) не придерживаются выбранного вами стиля Qt 4, то вам, вероятно, придётся указать Qt 4, как найти стили KDE (Oxygen, Phase и т.д.). Вам просто нужно установить переменную окружения QT_PLUGIN_PATH
. Например:
QT_PLUGIN_PATH=$HOME/.kde4/lib/kde4/plugins/:/usr/lib/kde4/plugins/
После этого qtconfig-qt4
сможет найти ваши стили KDE, и всё снова будет выглядеть красиво!
Также можно создать символическую ссылку из каталога стилей QT4 в каталог стилей KDE4:
# ln -s /usr/lib/{kde,qt}4/plugins/styles/название_темы
Все приложения Qt 5 перестали запускаться после обновления Qt 5
Если вы видите такую ошибку:
Qt FATAL: Cannot mix incompatible Qt library (version 0x50900) with this library (version 0x50901)
то, скорее всего, вы используете стороннюю платформу тем Qt 5 или плагин стиля, который не был перекомпилирован под последнюю версию Qt 5. Они обычно используют приватные заголовки Qt, что означает, что они зависят от точной версии Qt, а не только от совпадающего soname. Выясните, какую тему/стиль вы используете, проверив переменные окружения QT_STYLE_OVERRIDE
и QT_QPA_PLATFORMTHEME
, и пересоберите соответствующий пакет AUR.
QXcbConnection: XCB error: 2 (BadValue)
Создайте следующий файл [1]:
/etc/xdg/QtProject/qtlogging.ini
[Rules] qt.qpa.xcb.xcberror=false
Неправильное выравнивание или масштабирование графики
Смотрите HiDPI (Русский)#Qt 5.
Мёртвые клавиши не работают в приложениях Qt
Если вы настроили мёртвые клавиши (dead keys) и они работают в приложениях GTK, но не в KDE или приложениях Qt — возможно, у вас не загружен правильный файл compose в сеансе Xorg.
Для проверки:
- запустите Qt-приложение с включенным правилом логирования
qt.xkb.compose.debug
, пример запуска qtqr:QT_LOGGING_RULES=qt.xkb.compose.debug=true qtqr
- затем попробуйте написать символ с использованием мёртвой клавиши, например
<dead_circumflex> <e>
для вводаê
(LATIN SMALL LETTER E WITH CIRCUMFLEX) - если появилась ошибка
qt.xkb.compose: failed to create compose table
, то, вероятно, проблема именно в этом.
Для решения сначала определите свою локаль. Затем, если ваша локаль не имеет собственной папки в /usr/share/X11/locale/
, например fr_FR.UTF-8
, найдите её в файле compose.dir
, чтобы найти соответствующий файл compose (например en_US.UTF-8/Compose
):
$ grep fr_FR.UTF-8 /usr/share/X11/locale/compose.dir
en_US.UTF-8/Compose fr_FR.UTF-8 en_US.UTF-8/Compose: fr_FR.UTF-8
Затем создайте или отредактируйте файл ~/.XCompose
для включения этого файла:
~/.XCompose
include "%S/en_US.UTF-8/Compose"
После перезапуска Qt-приложения с правилом логирования QT_LOGGING_RULES=qt.xkb.compose.debug=true
. ошибка qt.xkb.compose: failed to create compose table
должна пропасть.
Диалог выбора файла работает очень медленно и приводит к краху приложения
Это могло случиться из-за заполнения файла ~/.config/QtProject.conf
сотнями мегабайт мусора: удалите его. [2][3]