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[ссылка недействительна: сохранено в aur-mirror]
- Polymer — Порт темы KDE Plastik для Qt3.
- Bespin — Тема KDE с широкими возможностями настройки.
- http://cloudcity.sourceforge.net/frame.php || bespin-svnAUR[ссылка недействительна: сохранено в aur-mirror]
Шрифты
Шрифты в 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[ссылка недействительна: сохранено в 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();
}
}
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()