Qt (Русский) - ArchWiki

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

Ссылки по теме

- KDE (Русский)
- Единый вид приложений Qt и GTK
- GTK (Русский)

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.

## Выбор набора 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

- 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

- 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.

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

- android-armv7a-eabi-qt5AUR - armeabi-v7a
- android-aarch64-qt5AUR - aarch64
- android-x86-qt5AUR - x86
- android-x86-64-qt5AUR - x86_64

В качестве альтернативы можно использовать официальный установщик 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

- Пакет: 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)

- Пакет: pyside2
- Сайт: 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.

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

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]

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

- Официальный сайт
- Документация Qt
- Planet Qt

Category:

- Widget toolkits (Русский)

Hidden category:

- Pages with broken package links