Pull to refresh

Обзор новых возможностей в Qt Quick

Reading time 4 min
Views 20K
Original author: Jens Bache-Wiig
С выходом Qt 5.1 было добавлено много нового функционала и в Qt Quick, краткий обзор которого будет представлен в этой статье. Большинство функций, которые раньше были частью Desktop Components Project, теперь официально являются частью Qt Quick. Наиболее популярной является QtQuick.Controls, но так же был добавлен ряд смежных функций, о которых я и хотел бы рассказать в этой статье…

Layouts


Хотя anchors и positioners уже итак обеспечивали большую гибкость Qt Quick, их использование с пользовательским интерфейсом, изменяющим размеры, становилось затруднительным и утомительным.
Добавляя QtQuick.Layouts в качестве дополнения к существующим методам, основанным на использовании anchors, вы сможете создавать сложные разметки (layouts) изменяемого размера, соблюдая минимальные и максимальные size hints и объявлять элементы expanding или fixed простым способом.
Ранее, о layout писалось здесь.



Controls




Contorls в Qt Quick — это, по существу, эквивалент виджетов. Большинство средств управления (controls) вам уже известны и вполне ожидаемы, это: buttons, combo box, spin box, group box, sliders, progress bars, text fields и menus.
Они были созданы с нуля, используя всё тот же Qt Quick и, конечно, могут использоваться с любым уже существующим Qt Quick кодом.






Views


В дополнение к основным средствам управления, был добавлен новый набор представлений (views). На картинке слева представлен SplitView, позволяющий добавить вертикальную или горизонтальную метку изменения размеров элементов представления.
ScrollView дополняет существующий элемент Flickable, добавляя поддержку полос прокрутки и фреймов. ScrollView может использоваться как раздельно, так и в сочетании с Flickable, например, чтобы добавить полосы прокрутки в ListView.


ListView обеспечивал большую гибкость, в свое время, однако всё равно было проблематично создать классическое табличное представление. Чтобы изменить эту ситуацию, был добавлен TableView (изображен слева), предоставляющий поддержку собственных стилей, а так же изменения размеров столбцов и строк.






Большинство средств управлений и представлений могут быть совмещены вместе и по-разному настроены. Таким образом, вы можете создать полностью уникальный интерфейс своего приложения.











Несмотря на то, что основное внимание было уделено улучшению Qt Quick разработки на десктопе, contorls будут работать на всех поддерживаемых платформах. Однако не следует ожидать, что настольное приложение будет выглядеть и работать так же хорошо и на планшете, без соответствующей адаптации тех же представлений. Чтобы упростить разработку приложений для планшетов и мобильных устройств, был добавлен StackView (см. изображение слева), обеспечивающий типичную стек-навигацию (нескольких страниц приложения).





Платформа в QML


Обычной проблемой, при написании кросс-платформенных приложений в Qt Quick, было то, что адаптировать свой UI под различные платформы было не так просто. Чтобы избавить вас от этих сложностей, теперь мы представляем платформу непосредственно в QML, через глобальное свойство Qt.platform.os. Возможные значения:
  • «android» — Android
  • «blackberry» — BlackBerry OS
  • «ios» — Apple iOS
  • «linux» — Linux
  • «mac» — Mac OS X
  • «unix» — Other Unix-based OS
  • «windows» — Windows
  • «wince» — Windows CE

Стандартные диалоговые окна


Появилось несколько новых стандартных диалоговых окон через импорт QtQuick.Dialogs. Первоначально будут поддерживаться только ColorDialog и FileDialog, но в более поздних выпусках планируется добавить больше диалоговых окон.

Улучшение Window


Поддержка объявления окон в Qt Quick была добавлена в Qt 5.0, в 5.1 было сделано много улучшений их обработки. Объявление Window в другом окне, неявно назначит ему родителя (окно, в котором оно было объявлено). На практике это означает, что модальные диалоговые окна будут вести себя так, как им и положено, а дочерние окна будут правильно центрироваться в их родителях по умолчанию. Кроме того, был добавлен сигнал закрытия, чтобы можно было корректно обработать запрос закрытия окна.

Текстовые документы и C++



В существующем TextEdit вы ограничивались простым выводом отформатированного текста. Большинство сложных Qt приложений требуют доступ к текстовому документу для обеспечения расширенных функций, как например, подсветка синтаксиса или поддержка печати. Т.к. использование этой функциональности потребует плагин плагин С++, он стал доступен и из TextEdit и из нового TextArea. Таким образом, вы можете включить эти функции в свои Qt Quick приложения. Как видно на скриншоте слева, старый добрый пример TextEdit был портирован в Qt Quick, используя этот функционал.


ApplicationWindow


ApplicationWindow подобен QQuickWindow, но добавляет поддержку установки окну определенного MenuBar, ToolBar и StatusBar в QML.

QQmlApplicationEngine


В Qt 5.0, приложения Qt Quick обычно создавались путем объявления QQuickView на С++ и задавая url на нем. Недостаток такого подхода в том, что вы должны использовать С++ для установки таких свойств, как ширина, высота и т.д. В Qt 5.1 предлагается использовать Window или ApplicationWindow как корневой элемент вашего приложения, отдавая полный контроль Qt Quick. Чтобы сделать этот вариант использования немного проще, был добавлен QQmlApplicationEngine — всё, что вы должны сделать, это настроить свое окно Qt Quick, выбрать необходимый файл перевода, после чего неявно сигнал приложения quit() будет подключен к вашему корневому окну.
#include <QGuiApplication>
#include <QQmlApplicationEngine>
 
int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    QQmlApplicationEngine engine("main.qml");
    return app.exec();
}

Встраивание Qt Quick в виджетах


В блоге Qt уже писалось об этом, теперь был добавлен поддерживаемый способ встраивания Qt Quick 2 в widget-based приложения. Это достигается использованием новой функции QWidget::createWindowContainer().

Заключение


Все нововведения невозможно охватить в этой статье, по-этому не стесняйтесь изредка проверять и читать документацию. Всё описанное выше, естественно включено в Qt 5.1 RC. Так же, не забывайте сообщать о любых найденных проблемах в баг трекер.
Tags:
Hubs:
+16
Comments 1
Comments Comments 1

Articles