Qt (Русский)
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 предоставляется пакетом qt4AUR, документация — qt4-docAUR.
- Qt 3.x можно установить из AUR с пакетом qt3AUR, документация — qt3-docAUR.
Выбор набора 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.
- QtCurve — Очень гибкая в настройке и популярная тема рабочего стола с поддержкой приложений GTK+ и Qt.
- Skulpture — Еще одна тема для KDE и Qt.
- http://kde-look.org/content/show.php/?content=59031 || skulptureAUR[ссылка недействительна: package not found]
- Polymer — Порт темы KDE Plastik для Qt3.
- Bespin — Тема KDE с широкими возможностями настройки.
- http://cloudcity.sourceforge.net/frame.php || bespin-svnAUR[ссылка недействительна: package not found]
Шрифты
Шрифты в Qt могут быть настроены с помощью Qt Configuration в меню Fonts
→ Default Font
.
Значки
С помощью 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.
Инструменты
Список официальных инструментов разработки для Qt:
- Qt Creator — Кроссплатформенная среда разработки, созданная для разработки приложений Qt.
- Qt Linguist — Набор инструментов для упрощения перевода и интернационализации приложений Qt.
- Qt Assistant — Справочная система для чтения документации по Qt.
- Qt Designer — Инструмент для разметки графического интерфейса приложений Qt и создания форм для виджетов.
- Qt Quick Designer — Визуальный редактор файлов QML, поддерживающий режим WYSIWYG. Он позволяет с нуля проектировать и разрабатывать приложения и компоненты Qt Quick.
- QML Viewer — Инструмент для быстрой разработки и отладки приложений QML.
- qmake — Средство автоматизации процесса сборки приложений Qt на различных платформах, похожее на cmake, но с меньшим количеством опции и ориентированное на приложения Qt.
- uic — Генератор кода C++ на основе .ui-файлов.
- rcc — Инструмент для упаковки ресурсов (например, изображений) в приложение при сборке. По сути генерирует код на C++, содержащий данные, указанные в файле ресурсов (.qrc).
- moc — Препроцессор исходных файлов, обрабатывающий расширения Qt для C++ (например, директивы механизма сигналов и слотов, RTTI, аннотации).
Другие языки программирования
Qt имеет привязки ко многим популярным языкам программирования. Полный список поддерживаемых языков вы можете найти в статье Qt в Wikipedia.
Приведенные ниже примеры отображают окно с сообщением 'Hello world!'.
C++
- Пакет: qt4AUR
- Сайт: 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
- Версия Qt4:
- Команда запуска:
./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
- Пакет: qt4AUR или 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 } }
Python (PyQt)
- Пакеты:
- python-pyqt4AUR — привязки Python 3.x для Qt 4
- python2-pyqt4AUR — привязки 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-pysideAUR — привязки Python 3.x
- python2-pysideAUR — привязки 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[ссылка недействительна: package not found]
- Сайт: 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[ссылка недействительна: package not found]
- Сайт: 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[ссылка недействительна: package not found] или qtjambi-betaAUR[ссылка недействительна: package not found].
- Сайт: 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(); } }
Perl
- Пакет: kdebindings-perlqtAUR[ссылка недействительна: package not found]
- Сайт: 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[ссылка недействительна: package not found]
- Сайт: http://www.nongnu.org/libqtlua/
- Команда запуска:
qtlua hello.lua
hello.lua
label = qt.new_widget("QLabel") label:setText("Hello World!") label:show()