Qt (Русский)

From ArchWiki
Состояние перевода: На этой странице представлен перевод статьи Qt. Дата последней синхронизации: 31 мая 2023. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

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 по умолчанию

С помощью qtchooserAUR, вы можете выбирать, для какой версии Qt будут помещены исполняемые файлы (например, qmake) в /usr/bin. По умолчанию используется Qt 5 (например, qmake-qt5).

Примечание: Сейчас qtchooserAUR конфликтует с qt5-base. Вы можете попытаться установить его в /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.
https://invent.kde.org/plasma/breeze || breeze
  • Oxygen — Стиль KDE Oxygen.
https://invent.kde.org/plasma/oxygen || oxygen
  • Lightly — Форк Breeze, который стремится выглядеть современно и минималистично.
https://github.com/Luwx/Lightly || lightly-gitAUR
  • QtCurve — Гибкая в настройке тема рабочего стола с поддержкой приложений GTK и Qt.
https://invent.kde.org/system/qtcurve || qtcurve-qt5[ссылка недействительна: package not found]
  • Adwaita-Qt — Стиль для Qt-приложений, выглядящий как GNOME Shell.
https://github.com/MartinBriza/adwaita-qt || adwaita-qt5[ссылка недействительна: package not found]
  • Qt style plugins — Дополнительные плагины для Qt 5: GTK, Cleanlooks, Motif, Plastique.
https://code.qt.io/cgit/qt/qtstyleplugins.git || qt5-stylepluginsAUR
  • Kvantum — Настраиваемый, основанный на SVG движок тем с множеством встроенных стилей. Также включает в себя имитацию некоторых популярных тем GTK: Adapta, Arc, Ambiance
https://github.com/tsujan/Kvantum/tree/master/Kvantum || kvantum

Стили в Qt 4

Qt 4 пытается имитировать поведение текущей среды рабочего стола, если не столкнётся с какими-либо проблемами или жёстко закодированными настройками.

  • В KDE Plasma он использует текущий выбранный стиль Qt. Это можно настроить через Параметры системы (systemsettings), раздел Внешний вид > Оформление приложений.
  • Для Cinnamon, GNOME, Xfce он использует GTK (QGtkStyle).
  • В других средах рабочего стола используется Windows.

Для тех, кто хочет изменить внешний вид и оформление приложений Qt 4, в пакете qt4AUR есть графический инструмент Qt Configuration (qtconfig-qt4). Он предлагает простой интерфейс для настройки внешнего вида приложений Qt 4, в том числе стиля, цветов, шрифтов и некоторых других параметров.

Примечание: При использовании стиля GTK настройки цветов и шрифтов игнорируются и берутся из GTK 2.

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.
https://github.com/MartinBriza/adwaita-qt || adwaita-qt4AUR

Таблицы стилей 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

Примечание: Qt Creator 4.12 или более поздние версии могут автоматически установить SDK Tools, NDK и основные пакеты. Смотрите Qt Creator: Specifying Android Device Settings для более подробной информации.

Прежде всего, вам понадобится установить Android SDK и NDK из AUR или через Android Studio.

Для SDK также нужен OpenJDK. Разным версиям Qt нужны разные версии, подробнее в документации.

Далее вам понадобится Qt 5 для Android. Вы можете установить его из AUR, как описано ниже, или собрать его самостоятельно, инструкции по сборке можно найти на странице в вики Qt.

В случае проблем посмотрите список известных проблем.

В качестве альтернативы можно использовать официальный установщик Qt.

Инструменты

Список официальных инструментов разработки для Qt:

  • Qt Creator — Кроссплатформенная среда разработки, созданная для разработки приложений Qt.
https://doc.qt.io/qtcreator/ || qtcreator
  • 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.
https://doc.qt.io/qtcreator/creator-qtquickdesigner-plugin.html || qtcreator
  • 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

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)

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)

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.

Для проверки:

  1. запустите Qt-приложение с включенным правилом логирования qt.xkb.compose.debug, пример запуска qtqr: QT_LOGGING_RULES=qt.xkb.compose.debug=true qtqr
  2. затем попробуйте написать символ с использованием мёртвой клавиши, например <dead_circumflex> <e> для ввода ê (LATIN SMALL LETTER E WITH CIRCUMFLEX)
  3. если появилась ошибка 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]

Смотрите также