Qt (Русский)

Состояние перевода:
На этой странице представлен перевод статьи
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
AUR
.
Qt 4.x
предоставляется пакетом
qt4
AUR
, документация —
qt4-doc
AUR
.
Qt 3.x
предоставляется пакетом
qt3
AUR
, документация —
qt3-doc
AUR
[
ссылка недействительна
: package not found]
.
Выбор набора Qt по умолчанию
С помощью
qtchooser
AUR
[
ссылка недействительна
: package not found]
, вы можете выбирать, для какой версии Qt будут помещены исполняемые файлы (например,
qmake
) в
/usr/bin
. По умолчанию используется Qt 5 (например,
qmake-qt5
).
Примечание
Сейчас
qtchooser
AUR
[
ссылка недействительна
: package not found]
конфликтует с
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-git
AUR
[
ссылка недействительна
: package not found]
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
AUR
Qt style plugins
— Дополнительные плагины для Qt 5:
GTK
,
Cleanlooks
,
Motif
,
Plastique
.
https://code.qt.io/cgit/qt/qtstyleplugins.git
||
qt5-styleplugins
AUR
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, в пакете
qt4
AUR
есть графический инструмент
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-kde4
AUR
[
ссылка недействительна
: package not found]
Adwaita-Qt
— Стиль для Qt-приложений, выглядящий как GNOME Shell.
https://github.com/MartinBriza/adwaita-qt
||
adwaita-qt4
AUR
[
ссылка недействительна
: package not found]
Таблицы стилей 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-kde
AUR
имеет более хорошую интеграцию с приложениями 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-qt5
AUR
[
ссылка недействительна
: package not found]
- armeabi-v7a
android-aarch64-qt5
AUR
[
ссылка недействительна
: package not found]
- aarch64
android-x86-qt5
AUR
[
ссылка недействительна
: package not found]
- x86
android-x86-64-qt5
AUR
[
ссылка недействительна
: package not found]
- 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:
qt4
AUR
Qt Assistant
— Справочная система для чтения документации по Qt.
https://doc.qt.io/qt-5/qtassistant-index.html
|| Qt 5:
qt5-tools
, Qt 4:
qt4
AUR
Qt Designer
— Инструмент для разметки графического интерфейса приложений Qt и создания форм для виджетов.
https://doc.qt.io/qt-5/qtdesigner-manual.html
|| Qt 5:
qt5-tools
, Qt 4:
qt4
AUR
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:
qt4
AUR
qmake
— Средство автоматизации процесса сборки приложений Qt на различных платформах, похожее на
cmake
, но с меньшим количеством опций и ориентированное на приложения Qt.
https://doc.qt.io/qt-5/qmake-manual.html
|| Qt 5:
qt5-base
, Qt 4:
qt4
AUR
uic
— Генератор кода C++ на основе
.ui
-файлов.
https://doc.qt.io/qt-5/uic.html
|| Qt 5:
qt5-base
, Qt 4:
qt4
AUR
rcc
— Инструмент для упаковки ресурсов (например, изображений) в приложение при сборке. По сути генерирует код на C++, содержащий данные, указанные в файле ресурсов (
.qrc
).
https://doc.qt.io/qt-5/rcc.html
|| Qt 5:
qt5-base
, Qt 4:
qt4
AUR
moc
— Препроцессор исходных файлов, обрабатывающий расширения Qt для C++ (например, директивы механизма сигналов и слотов, RTTI, аннотации).
https://doc.qt.io/qt-5/moc.html
|| Qt 5:
qt5-base
, Qt 4:
qt4
AUR
Другие языки программирования
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
AUR
Сайт:
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
AUR
:
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]
Смотрите также
Официальный сайт
Документация Qt
Planet Qt