# Qt (Русский)

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

- KDE (Русский)
- Uniform Look for Qt and GTK Applications (Русский)
- GTK+

Эта страница нуждается в сопроводителе

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki

Qt — кроссплатформенный набор инструментов для создания приложений и виджетов, который использует стандартный язык программирования C++, а также специальный генератор кода (Meta Object Compiler, или moc) вместе с набором макросов, расширяющих возможности языка. Набор предоставляет широкие возможности по разработке приложений; среди наиболее важных:

- Работа на основных компьютерных платформах и операционных системах, а также на некоторых мобильных платформах.
- Обширная поддержка возможностей интернационализации.
- Полнофункциональная библиотека с поддержкой SQL баз данных, парсинга XML, управления потоками, сети и унифицированный кроссплатформенный программный интерфейс (API) для работы с файлами.

На основе фреймворка Qt развивается сообщество и программное обеспечение KDE. Qt лежит в основе других важных проприетарных и открытых программных проектов, таких как VLC, VirtualBox, Opera, Mathematica, Skype и многих других.

## Установка

В настоящее время две версии Qt доступны в официальных репозиториях. Они могут быть установлены со следующими пакетами:

- Qt 5.x входит в пакет qt5-base, документация — qt5-doc.
- Qt 4.x предоставляется пакетом qt4, документация — qt4-docAUR.
- Qt 3.x можно установить из AUR с пакетом qt3AUR, документация — qt3-docAUR.

Важно: Пакеты Qt больше не помещают исполняемые файлы утилит вроде qmake в `/usr/bin`. Вместо этого создаются символические ссылки с суффиксом версии, например `qmake-qt5`, `qmake-qt4`, `qmake-qt3`. Это может вызвать проблемы со сборкой проектов для Qt версий 3 и 4. Как установить исполняемые файлы в `/usr/bin` показано в разделе #Выбор набора Qt по умолчанию.

## Выбор набора Qt по умолчанию

Установив qtchooserAUR, вы сможете выбрать, для какого набора Qt из установленных необходимо перенести исполняемые файлы (например, qmake) в `/usr/bin`. По умолчанию используется Qt5.

### Используя переменные окружения

Чтобы выбрать конкретный набор Qt, вы можете создать переменную окружения `QT_SELECT`. Например, чтобы выбрать Qt4, добавьте `export QT_SELECT=4` в файл инициализации вашей командной оболочки (например, `~/.bash_profile` или `~/.zsh_profile`).

### Используя файл конфигурации

Вы можете выбрать версию набора Qt по умолчанию, создав символическую ссылку `~/.config/qtchooser/default.conf` на один из файлов .conf в каталоге `/etc/xdg/qtchooser`. Например, чтобы выбрать Qt4, создайте ссылку на `/etc/xdg/qtchooser/4.conf`:

    $ ln -s /etc/xdg/qtchooser/4.conf ~/.config/qtchooser/default.conf

## Внешний вид

### Настройка

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

Обратите внимание, что утилита была исключена в версии Qt5. Если вы хотите принудительно установить внешний вид и поведение интерфейса приложений Qt5, установите переменную окружения `QT_STYLE_OVERRIDE` с названием желаемого стиля (например, `gtk`).

Панель KDE System Settings (Настройки Системы) также предоставляет доступ ко многим параметрам графического интерфейса, которые используются в приложениях Qt.

#### Темы

Несколько стилей поставляются вместе с Qt, например GTK+, Windows или CDE, однако вы можете установить многие другие стили из официальных репозиториев или AUR (большинство созданы для рабочего стола KDE):

- Oxygen — Одна из стандартных тем рабочего стола KDE.

  http://www.oxygen-icons.org/ || kdebase-runtime

- QtCurve — Очень гибкая в настройке и популярная тема рабочего стола с поддержкой приложений GTK+ и Qt.

  http://kde-look.org/content/show.php?content=40492 || qtcurve

- Skulpture — Еще одна тема для KDE и Qt.

  http://kde-look.org/content/show.php/?content=59031 || skulptureAUR[ссылка недействительна: сохранено в aur-mirror]

- Polymer — Порт темы KDE Plastik для Qt3.

  http://kde-look.org/content/show.php?content=21748 || polymerAUR

- Bespin — Тема KDE с широкими возможностями настройки.

  http://cloudcity.sourceforge.net/frame.php || bespin-svnAUR[ссылка недействительна: сохранено в aur-mirror]

#### Шрифты

Шрифты в Qt могут быть настроены с помощью Qt Configuration в меню `Fonts` → `Default Font`.

Примечание: Если у вас рабочий стол GTK+ (например, вы используете GNOME или Xfce), и опция `GUI Style` установлена в `Desktop Settings (default)` или `GTK+`, эта настройка будет проигнорирована.

#### Значки

С помощью Qt Configuration нельзя установить тему значков, но, так как Qt следует спецификации именования значков Freedesktop.org, любая тема установленная для X будет использоваться и в Qt.

### Ручная настройка

Qt хранит все настройки в файле `~/.config/Trolltech.conf`. В его содержимом довольно трудно ориентироваться, так как он содержит множество опций не связанных с внешним видом приложений. Однако, для внесения любых изменений вы можете всего-лишь дописать новые значения в конец файла и тем самым переопределить любые ранее установленные значения (убедитесь, что добавляете свои изменения в секцию `[Qt]`).

Например, чтобы изменить тему на QtCurve, добавьте:

    ~/.config/Trolltech.conf

    ...
    [Qt]
    style=QtCurve

### Таблицы стилей Qt

Интересным способом модификации внешнего вида приложений Qt является использование таблиц стилей, которые представляют собой обычные CSS-файлы. Используя таблицы стилей, пользователь может изменить внешний вид любого виджета в приложении.

Чтобы запустить приложение, используя указанную таблицу стилей просто передайте путь к файлу в опции `--stylesheet`:

    $ qt_application --stylesheet style.qss

Для получения подробной информации о таблицах стилей Qt смотрите официальную документацию или руководство. Пример таблицы стилей вы можете найти на этой странице.

### GTK+ и Qt

Если вы используете одновременно приложения GTK+ и Qt, их внешний вид может несколько различаться. Если вы хотите, чтобы стили отображения в точности соответствовали друг другу, смотрите статью Единый вид приложений GTK и Qt.

## Разработка

### Поддержка платформ

Qt поддерживает большинство доступных сегодня платформ, включая даже весьма малоизвестные. Полный список поддерживаемых платформ вы можете найти в статье на Wikipedia.

### Инструменты

Эта статья или раздел нуждается в расширении

Причина: Нужны ссылки на инструменты Qt5. (обсуждение: Talk:Qt (Русский)#)

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

- Qt Creator — Кроссплатформенная среда разработки, созданная для разработки приложений Qt.

  http://qt-project.org/doc/qtcreator/ || qtcreator

- Qt Linguist — Набор инструментов для упрощения перевода и интернационализации приложений Qt.

  http://qt-project.org/doc/qt-4.8/linguist-manual.html || qt4

- Qt Assistant — Справочная система для чтения документации по Qt.

  http://qt-project.org/doc/qt-4.8/assistant-manual.html || qt4

- Qt Designer — Инструмент для разметки графического интерфейса приложений Qt и создания форм для виджетов.

  http://qt-project.org/doc/qt-4.8/designer-manual.html || qt4

- Qt Quick Designer — Визуальный редактор файлов QML, поддерживающий режим WYSIWYG. Он позволяет с нуля проектировать и разрабатывать приложения и компоненты Qt Quick.

  http://qt-project.org/doc/qtcreator-2.8/creator-using-qt-quick-designer.html || qtcreator

- QML Viewer — Инструмент для быстрой разработки и отладки приложений QML.

  http://qt-project.org/doc/qt-4.8/qmlviewer.html || qt4

- qmake — Средство автоматизации процесса сборки приложений Qt на различных платформах, похожее на cmake, но с меньшим количеством опции и ориентированное на приложения Qt.

  https://qt-project.org/doc/qt-4.8/qmake-manual.html || qt4

- uic — Генератор кода C++ на основе .ui-файлов.

  http://qt-project.org/doc/qt-4.8/uic.html || qt4

- rcc — Инструмент для упаковки ресурсов (например, изображений) в приложение при сборке. По сути генерирует код на C++, содержащий данные, указанные в файле ресурсов (.qrc).

  http://qt-project.org/doc/qt-4.8/rcc.html || qt4

- moc — Препроцессор исходных файлов, обрабатывающий расширения Qt для C++ (например, директивы механизма сигналов и слотов, RTTI, аннотации).

  http://doc.qt.digia.com/4.7-snapshot/moc.html || qt4

### Другие языки программирования

Qt имеет привязки ко многим популярным языкам программирования. Полный список поддерживаемых языков вы можете найти в статье Qt в Wikipedia.

Приведенные ниже примеры отображают окно с сообщением 'Hello world!'.

#### C++

- Пакет: qt4
  - qt4 — версия 4.x
  - qt5-base — версия 5.x
- Сайт: http://qt-project.org/
- Команда сборки:
  - Версия Qt4: `g++ $(pkg-config --cflags --libs QtGui) -o hello hello.cpp`
  - Версия Qt5: `g++ $(pkg-config --cflags --libs Qt5Widgets) -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

- Пакет: qt4 или qt5-declarative.
- Сайт: http://qt-project.org/
- Команда запуска: `qmlviewer-qt4 hello.qml`

    hello.qml

    import QtQuick 1.0

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

Примечание: Для Qt 5.x нужно импортировать QtQuick 2.y.

#### Python (PyQt)

- Пакеты:
  - python-pyqt4 — привязки Python 3.x для Qt 4
  - python2-pyqt4 — привязки Python 2.x для Qt 4
  - python-pyqt5 — привязки Python 3.x для Qt 5
  - python2-pyqt5 — привязки Python 2.x для Qt 5
- Сайт: http://www.riverbankcomputing.co.uk/software/pyqt/intro
- Команда запуска: `python hello-pyqt.py` или `python2 hello-pyqt.py`.

    hello-pyqt.py

    import sys
    from PyQt4 import QtGui

    app = QtGui.QApplication(sys.argv)
    label = QtGui.QLabel("Hello world!")

    label.show()
    sys.exit(app.exec_())

The Qt 5.x version is slighly different:

    hello-pyqt.py

    import sys
    from PyQt5 import QtWidgets

    app = QtWidgets.QApplication(sys.argv)
    label = QtWidgets.QLabel("Hello world!")

    label.show()
    sys.exit(app.exec_())

#### Python (PySide)

- Пакеты:
  - python-pyside — привязки Python 3.x
  - python2-pyside — привязки Python 2.x
- Сайт: http://www.pyside.org/
- Команда запуска: `python hello-pyside.py` или `python2 hello-pyside.py`

    hello-pyside.py

    import sys
    from PySide.QtCore import *
    from PySide.QtGui import *

    app = QApplication(sys.argv)
    label = QLabel("Hello world!")

    label.show()
    sys.exit(app.exec_())

#### C#

- Пакет: kdebindings-qyotoAUR[ссылка недействительна: сохранено в aur-mirror]
- Сайт: http://techbase.kde.org/Development/Languages/Qyoto
- Команда сборки: `mcs -pkg:qyoto hello.cs`
- Команда запуска: `mono hello.exe`

    hello.cs

    using System;
    using Qyoto;

    public class Hello {
        public static int Main(String[] args) {
            new QApplication(args);
            new QLabel("Hello world!").Show();

            return QApplication.Exec();
        }
    }

#### Ruby

- Пакет: kdebindings-qtrubyAUR[ссылка недействительна: сохранено в aur-mirror]
- Сайт: http://rubyforge.org/projects/korundum/
- Команда запуска: `ruby hello.rb`

    hello.rb

    require 'Qt4'

    app = Qt::Application.new(ARGV)
    hello = Qt::Label.new('Hello World!')

    hello.show
    app.exec

#### Java

- Пакет: qtjambiAUR[ссылка недействительна: сохранено в aur-mirror] или qtjambi-betaAUR[ссылка недействительна: сохранено в aur-mirror].
- Сайт: http://qt-jambi.org/
- Команда сборки: `javac Hello.java -cp /opt/qtjambi-beta/qtjambi-linux64-community-4.7.0/qtjambi-4.7.0.jar`.
- Команда запуска: `java -cp /opt/qtjambi-beta/qtjambi-linux64-community-4.7.0/qtjambi-4.7.0.jar:. Hello`.

    Hello.java

    import com.trolltech.qt.gui.*;

    public class Hello
    {
        public static void main(String args[])
        {
            QApplication.initialize(args);
            QLabel hello = new QLabel("Hello World!");

            hello.show();
            QApplication.exec();
        }
    }

Примечание: Инструкции сборки и пример были протестированы на бета-версии Qt Jambi 4.7.0.

#### Perl

- Пакет: kdebindings-perlqtAUR[ссылка недействительна: сохранено в aur-mirror]
- Сайт: http://code.google.com/p/perlqt4/
- Команда запуска: `perl hello.pl`

    hello.pl

    use QtGui4;

    my $a = Qt::Application(\@ARGV);
    my $hello = Qt::Label("Hello World!", undef);

    $hello->show;
    exit $a->exec;

#### Lua

- Пакет: libqtluaAUR[ссылка недействительна: сохранено в aur-mirror]
- Сайт: http://www.nongnu.org/libqtlua/
- Команда запуска: `qtlua hello.lua`

    hello.lua

    label = qt.new_widget("QLabel")

    label:setText("Hello World!")
    label:show()

Примечание: QtLua не позволяет писать приложения Qt на чистом Lua; вместо этого, он предлагает расширение возможностей приложения на C++ с помощью скриптового языка.

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

- Официальная страница Qt
- Сайт проекта
- Документация Qt 4.8
- Planet Qt
- Приложения Qt

Categories:

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

Hidden category:

- Pages with broken package links