Qml что это
Перейти к содержимому

Qml что это

  • автор:

QML Самоучитель

Уже давно вышла версия Qt4 c поддержкой QML. С тех пор многое допиливалось и сейчас технология является довольно успешной и стабильной. Однако нормального описания так и не удавалось найти на русском языке. А на английском написано так, как говорится, «правой рукой, да левое ухо». Поэтому решил начать перевод самоучителя (пока базового, затем планирую расширенный) на русский язык. Собственно, найти самоучитель можно на моем GitHub или здесь ниже.

QML Самоучитель

В данном руководстве содержится введение в QML (язык интерфейсов Qt Quick). Оно охватывает не все — акцент делается на обучении базовым принципам, а особенности и дополнения приводится по мере необходимости.

В этом руководстве вы узнаете об основных типах QML, создадите ваш собственный компонент QML со свойствами и сигналами, а также создадите простую анимацию с помощью состояний и переходов.

Первая глава начинается с минимальной программы «Привет, мир», в следующих же главах приведены новые концепции.

Исходные коды из руководства находится в Qt каталоге:

examples/quick/tutorials/helloworld

Главы руководства:

  1. Базовые Типы.
  2. Компоненты QML.
  3. Состояния и переходы.

Глава 1 — Базовые Типы

Первая программа представляет собой очень простой «Hello world» пример, который познакомит вас с некоторыми базовыми концепциями QML.

На рисунке ниже показан скриншот этой программы:

QML код приложения:

import QtQuick 2.0 Rectangle < id: page width: 320; height: 480 color: "lightgray" Text < id: helloText text: "Hello world!" y: 30 anchors.horizontalCenter: page.horizontalCenter font.pointSize: 24; font.bold: true >>

Разбор по шагам

Импорт

Сперва нужно импортировать типы, которые нужны вам для этого примера. Большинство файлов QML импортируют встроенные типы QML (например, Rectangle, Image, . ), которые поставляются с Qt, используя:

import QtQuick 2.0
Тип — Прямоугольник
Rectangle < id: page width: 320; height: 480 color: "lightgray"

Здесь объявляется корневой объект типа Rectangle (Прямоугольник). Это один из основных строительных блоков, которые вы можете использовать для создания приложения на QML. Далее ему присваивается идентификатор, чтобы была возможность ссылаться на него в дальнейшем. В данном случае идентификатор имеет значение "page". Также устанавливаются свойства ширины, высоты и цвета. Тип Rectangle содержит много других свойств (таких как x и y), но они будут инициированы со значениями по умолчанию.

Тип - Текст
Text

Здесь добавляется тип Text в качестве дочернего элемента корневого типа Rectangle, который отображает текст "Hello world!".

Свойство y используется для позиционирования текста по вертикали на расстоянии 30 пикселей от верхней части его родительского элемента.

Свойство anchors.horizontalCenter прикладывается к горизонтальному центру типа. В этом случае указывается, что тип Text должен быть горизонтально центрирован в элементе "page" (см. Anchor-Based Layout).

Размер font.pointSize и font.bold связаны со шрифтами и используют точечную нотацию.

Просмотр примера

Чтобы просмотреть то, что вы создали, запустите инструмент qml (расположенный в каталоге bin) с вашим именем файла в качестве первого аргумента. Например, чтобы запустить предоставленный пример завершенной Главы 1 из места установки, вы должны ввести:

qml tutorials/helloworld/tutorial1.qml

Глава 2 - Компоненты QML

В этой главе описывается средство для изменения цвета текста.

На скриншоте выше изображен набор цветов, состоящий из шести ячеек с разными цветами. Чтобы избежать повторения одного и того же кода для каждой ячейки, создается новый компонент ячейки (компонент Cell). Компонент предоставляет способ определения нового типа, который можно повторно использовать в других файлах QML. Компонент QML подобен черному ящику и взаимодействует с внешним миром через свойства, сигналы и функции и обычно определяется в его собственном файле QML. (см. Документацию по Component). Имя файла компонента всегда должно начинаться с заглавной буквы английского алфавита.

Ниже показан QML код для Cell.qml:

import QtQuick 2.0 Item < id: container property alias cellColor: rectangle.color signal clicked(cellColor: color) width: 40; height: 25 Rectangle < id: rectangle border.color: "white" anchors.fill: parent >MouseArea < anchors.fill: parent onClicked: container.clicked(container.cellColor) >>

Разбор по шагам

Cell компонент
Item < id: container property alias cellColor: rectangle.color signal clicked(cellColor: color) width: 40; height: 25

Корневой тип нашего компонента - это элемент (Item) с идентификатором (ID) равным container. Элемент (Item) является самым основным визуальным типом в QML и часто используется в качестве контейнера для других типов.

property alias cellColor: rectangle.color

Выше объявляется свойство cellColor (цвет ячейки). Данное свойство доступно извне компонента, это позволяет создавать экземпляры ячеек с разными цветами. Это свойство является просто псевдонимом существующего свойства - цвета прямоугольника, составляющего ячейку (см. Привязку свойства).

signal clicked(cellColor: color)

Также нужно, чтобы у нашего компонента был сигнал, который мы вызываем при нажатии (clicked) с параметром цвета ячейки типа цвета (color). Позже мы будем использовать данный сигнал для изменения цвета текста в основном файле QML.

Rectangle

Компонент ячейки в основном представляет собой цветной прямоугольник с идентификатором (ID) rectangle.

Свойство anchors.fill - это удобный способ задать размер визуального типа. В этом случае прямоугольник будет иметь тот же размер, что и его родительский (parent) элемент (см. Макет на основе привязки).

MouseArea

Чтобы изменить цвет текста при щелчке по ячейке, создается тип MouseArea (область мышки) с тем же размером, что и ее родительский элемент.

Основной файл QML

В основном файле QML используется ранее созданный компонент Cell для создания средства выбора цвета:

import QtQuick 2.0 Rectangle < id: page width: 320; height: 480 color: "lightgray" Text < id: helloText text: "Hello world!" y: 30 anchors.horizontalCenter: page.horizontalCenter font.pointSize: 24; font.bold: true >Grid < id: colorPicker x: 4; anchors.bottom: page.bottom; anchors.bottomMargin: 4 rows: 2; columns: 3; spacing: 3 Cell < cellColor: "red"; onClicked: helloText.color = cellColor >Cell < cellColor: "green"; onClicked: helloText.color = cellColor >Cell < cellColor: "blue"; onClicked: helloText.color = cellColor >Cell < cellColor: "yellow"; onClicked: helloText.color = cellColor >Cell < cellColor: "steelblue"; onClicked: helloText.color = cellColor >Cell < cellColor: "black"; onClicked: helloText.color = cellColor >> >

Создается средство выбора цвета, представляя собой сетку из 6 ячеек с разными цветами.

Когда срабатывает сигнал щелчка мыши (clicked signal) по ячейке, установится цвет текста равным цвету ячейки, переданному в качестве параметра cellColor. Можно реагировать на любой сигнал нашему компоненту с помощью свойства с именем 'onSignalName' (см. Атрибуты сигнала).

Глава 3 - Состояния и переходы

В данной главе предыдущий пример станет немного более динамичным, используя состояния и переходы.

Нужно, чтобы текст перемещался в нижнюю часть экрана, поворачивался и становился красным при нажатии.

Ниже приведен QML код:

import QtQuick 2.0 Rectangle < id: page width: 320; height: 480 color: "lightgray" Text < id: helloText text: "Hello world!" y: 30 anchors.horizontalCenter: page.horizontalCenter font.pointSize: 24; font.bold: true MouseArea < id: mouseArea; anchors.fill: parent >states: State < name: "down"; when: mouseArea.pressed == true PropertyChanges < helloText < y: 160 rotation: 180 color: "red" >> > transitions: Transition < from: ""; to: "down"; reversible: true ParallelAnimation < NumberAnimation < properties: "y,rotation"; duration: 500; easing.type: Easing.InOutQuad >ColorAnimation < duration: 500 >> > > Grid < id: colorPicker x: 4; anchors.bottom: page.bottom; anchors.bottomMargin: 4 rows: 2; columns: 3; spacing: 3 Cell < cellColor: "red"; onClicked: helloText.color = cellColor >Cell < cellColor: "green"; onClicked: helloText.color = cellColor >Cell < cellColor: "blue"; onClicked: helloText.color = cellColor >Cell < cellColor: "yellow"; onClicked: helloText.color = cellColor >Cell < cellColor: "steelblue"; onClicked: helloText.color = cellColor >Cell < cellColor: "black"; onClicked: helloText.color = cellColor >> >

Разбор по шагам

states: State < name: "down"; when: mouseArea.pressed == true PropertyChanges < helloText < y: 160 rotation: 180 color: "red" >> >

Сначала создается новое состояние down для текстового типа. Это состояние будет активироваться при нажатии кнопки мышки и деактивироваться при ее отпускании.

Состояние down включает в себя набор изменений свойств из неявного дефолтного (default) состояния (элементы в том виде, в каком они были изначально определены в QML). В ручную (специально) устанавливаются свойства текста равными: положение по вертикали (y) равное 160, поворот - 180 и цвет - красный.

transitions: Transition < from: ""; to: "down"; reversible: true ParallelAnimation < NumberAnimation < properties: "y,rotation"; duration: 500; easing.type: Easing.InOutQuad >ColorAnimation < duration: 500 >> >

Чтобы текст появлялся внизу не мгновенно, а перемещался плавно - добавляется переход между нашими двумя состояниями.

"from" и "to" определяют состояния, между которыми будет выполняться переход. В этом случае происходит переход из состояния по умолчанию в состояние down.

Поскольку требуется, чтобы тот же переход выполнялся в обратном порядке при возврате из состояния down в дефолтное состояние, мы устанавливаем значение reversable равным true. Это эквивалентно записи двух переходов по отдельности.

Тип ParallelAnimation гарантирует, что два типа анимации (число и цвет) запускаются одновременно (параллельно). Также возможно бы запускать их один за другим, используя вместо этого SequentialAnimation.

Дополнительные сведения о состояниях и переходах см. в разделе Состояния QtQuick, а также Пример реализации состояний и переходов.

Послесловие

Данный туториал-самоучитель решил выложить здесь, т.к. GitHub стал блокировать репозитории русских компаний и, кто знает, может начнет и обычных людей банить. А Habr - наш, родненький.

Второй момент - автор данного перевода (то есть я) не является профессиональным переводчиком, поэтому ошибки могут присутствовать. Спасибо за понимание.

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

© 2022 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.

Qml что это

QML (Qt Meta-Object Language) — декларативный язык программирования, основанный на JavaScript, предназначенный для дизайна приложений, делающих основной упор на пользовательский интерфейс [2] . Является частью Qt Quick, среды разработки пользовательского интерфейса, распространяемой вместе с Qt. В основном используется для создания приложений, ориентированных на мобильные устройства с сенсорным управлением.

QML-документ представляет собой дерево элементов. QML элемент [3] , так же, как и элемент Qt, представляет собой совокупность блоков: графических (таких, как rectangle, image) и поведенческих (таких, как state, transition, animation). Эти элементы могут быть объединены, чтобы построить комплексные компоненты, начиная от простых кнопок и ползунков и заканчивая полноценными приложениями, работающими с Internet.

QML элементы могут быть дополнены стандартными JavaScript вставками путем встраивания .js файлов. Также они могут быть расширены C++ компонентами через Qt framework.

Синтаксис, семантика

import QtQuick 1.0 Rectangle  id: canvas width: 200 height: 200 color: "blue" Image  id: logo source: "pics/logo.png" anchors.centerIn: parent x: canvas.height / 5 > > 

Объекты задаются их типом, указанным перед парой фигурных скобок. Типы объектов всегда начинаются с заглавной буквы. В вышеупомянутом примере есть два объекта: Rectangle и Image. Внутри фигурных скобок можно задать информацию об объекте, например, его свойства. Свойства задаются в виде : . В этом примере у объекта Image есть свойство source, которому присвоено значение «pics/logo.png». Свойство и его значение разделяются двоеточием.

Инструменты разработки

Так как QML и JavaScript очень похожи, то любые среды разработки, поддерживающие JavaScript, могут быть использованы для работы с QML. Также полная поддержка подсветки синтаксиса, автозавершение кода, встроенная справочная система доступны в кросс-платформенной среде разработки Qt Creator IDE 2.1.

Примечания

  1. Qt 4.8.2 Released (22 May 2012). Архивировано из первоисточника 11 августа 2012.
  2. GettingStartedQMLRussian | Qt Wiki | Qt Developer Network
  3. Qt 4.7: QML Elements. Doc.qt.nokia.com. Архивировано из первоисточника 11 августа 2012.Проверено 22 сентября 2010.

Ссылки

  • Введение в QML (рус.)
  • QML примеры и Демо (англ.)
  • Qt Labs блог, связанный с QML (англ.)
  • обучение QML (англ.)
  • Появились в 2009 году
  • Языки программирования по алфавиту
  • Декларативное программирование
  • Скриптовые языки

Wikimedia Foundation . 2010 .

QML Applications

QML — это декларативный язык, который позволяет описывать пользовательские интерфейсы с точки зрения их визуальных компонентов и того, как они взаимодействуют и соотносятся друг с другом. Это легко читаемый язык, который был разработан для обеспечения динамического соединения компонентов, а также позволяет легко повторно использовать и настраивать компоненты в пользовательском интерфейсе. Используя модуль QtQuick , дизайнеры и разработчики могут легко создавать плавные анимированные пользовательские интерфейсы в QML и иметь возможность подключения этих пользовательских интерфейсов к любому серверному C++ libraries.

Что такое QML?

QML — это спецификация пользовательского интерфейса и язык программирования. Это позволяет разработчикам и дизайнерам создавать высокопроизводительные, плавно анимированные и визуально привлекательные приложения. QML предлагает легко читаемый декларативный синтаксис JSON-like с поддержкой императивных выражений JavaScript в сочетании с динамическими привязками свойств.

import QtQuick import QtQuick.Controls ApplicationWindow < width: 400 height: 400 visible: true Button < id: button text: "A Special Button" background: Rectangle < implicitWidth: 100 implicitHeight: 40 color: button.down ? "#d6d6d6" : "#f6f6f6" border.color: "#26282a" border.width: 1 radius: 4 > > >

Язык QML и инфраструктура ядра предоставляются модулем Qt QML . Подробную информацию о языке QML см. в документации по модулю Qt QML .

На следующих страницах содержится дополнительная информация о QML:.

  • First Steps with QML — начните использовать QML с этими примерами
  • Создание быстрых проектов Qt в Qt Creator
  • The QML Reference - ссылка на конструкции и функции QML
  • QML Соглашения о кодировании
  • Глоссарий терминов QML
  • Все QML APIs по модулю

Что такое Qt Quick?

Qt Quick — это стандартный тип library для QML и функциональность для QML. Он включает в себя визуальные типы, интерактивные типы, анимацию, модели и представления, эффекты частиц и шейдерные эффекты. Разработчик приложения QML может получить доступ ко всем этим функциям с помощью одного оператора импорта.

QtQuick QML library обеспечивается модулем Qt Quick . Подробную информацию о различных типах QML и других функциях Qt Quick см. в документации по модулю Qt Quick . Qt Quick добавляет визуальные типы, типы анимации и другие типы QML в дополнение к стандартным типам QML из Qt QML.

  • Визуальные типы в QML
  • Ответ на ввод данных пользователем в QML
  • Анимации в QML
  • Отображение текста в QML
  • Макеты в QML
  • Поддержка стилей и тем
  • Интеграция JavaScript в QML

Кнопки, меню и другие элементы управления

Для набора элементов управления пользовательского интерфейса модуль Qt Quick Controls реализует несколько элементов управления, таких как кнопки, меню и представления. Эти элементы управления поставляются с несколькими встроенными стилями, которые можно использовать, а также поддерживают создание пользовательских стилей.

Qt Быстрые проекты

Qt Creator настраивает среды проекта для следующих типов приложений Qt Quick:

  • Scroll — навигация на основе прокрутки
  • Стек — навигация на основе стека
  • Swipe — постраничное приложение с навигацией по экрану.
  • Python — проекты Qt for Python могут иметь QML UIs и поддержку Qt Creator.

Дополнительные сведения о приложениях Qt Quick см. на следующих страницах:

  • Создание быстрых проектов Qt
  • Design Tools - инструменты для проектирования UIs

Образцы кода и демонстрации

Чтобы узнать больше об использовании кода QML, есть несколько примеров кода, которые показывают, как используются типы QML. Кроме того, имеется несколько демонстраций, показывающих, как код QML используется в приложениях.

  • Getting Started Programming with Qt Quick — туториал, показывающий создание простого текстового редактора QML.
  • Qt Краткие примеры и учебные пособия

Дополнительные темы по разработке приложений

  • Интеграция QML и C++
  • Развертывание приложений QML
  • Рекомендации для QML и Qt Quick
  • Вопросы производительности и предложения
  • Интернационализация и локализация
  • Тестирование и отладка
    • Прототипирование с помощью инструмента времени выполнения qml
    • Отладка приложений QML
    • Быстрый тест Qt: платформа модульного тестирования QML

    Related Topics

    • Все типы QML
    • Все QML APIs по модулю
    • Устаревшие типы QML

    Введение в Qt Quick

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

    Хотя веб-разработчики все чаще называют себя дизайнерами и большинство разработчиков программного обеспечения смотрят на кодировку, как на искусство, по-прежнему большой проблемой для дизайнеров было участие в процессе разработки с Qt и C+. C, в конце концов, является языком низкого уровня ориентированным на системное программирование. Qt Quick был разработан с нуля, чтобы заполнить этот пробел. Как предметно-ориентированный язык он специально ориентирован на создание пользовательских интерфейсов. Это устанавливает декларативный слой поверх JavaScript, который похож на каскадные таблицы стилей (CSS). Вас не будут беспокоить приведение типов, указатели и время жизни объектов. Вместо этого, в центре внимания находится создание богатых пользовательских интерфейсов.

    Термины и терминология

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

    В первую очередь, Qt Quick, QtQuick и QML относятся к разным вещам! Qt Quick и QML часто используются как синонимы, что не совсем правильно. QML это язык, QtQuick (без пробела) является именем стандартной библиотеки компонентов, а Qt Quick (с пробелом) относится к технологии в целом. QML как язык позволяет описывать иерархии объектов и состояний основанной логики приложения. Это также может быть использовано в иных областях приложения, не связанных с разработкой пользовательского интерфейса.

    Настройка среды разработки

    Начиная с версии 4.7, Qt поставляется с Qt Quick. Вы можете редактировать свои QML файлы вашим любимым редактором, но Qt Creator в настоящее время предлагает лучшую поддержку. Qt предоставляет новый инструмент под названием "qmlviewer", который позволяет отображать QML файлы. Начиная с версии 2.1, Qt Creator также поддерживает специальный режиме разработки QML. Depending on your target platform you may opt for downloading all tools in one package - including the necessary cross-compile chains. Qt Quick также включена в последние Nokia и Meego/AppUp SDK. You can avoid these SDKs (and their gigabytes) by installing Qt with your favorite package manager and setting your editor to highlight QML files (.qml) as JavaScript or CSS. As of Maverick (10.10), Qt 4.7 and qmlviewer are both included in Ubuntu. Ищите libqt4-dev и qt4-qmlviewer пакеты.

    Здравствуй, мир!

    Начнем с самой простой программы, показывающей известное сообщение: "Здравствуй, мир!". Для загрузки файла, убедитесь, что qmlviewer под рукой. Если вы желаете использовать QtCreator, просто нажмите Файл->Новый файл или проект->Проект Qt Quick->Интерфейс пользователя на Qt Quick (File->New->Qt Quick Project->Qt Quick UI). Затем вставьте исходный код и нажмите на большую треугольную кнопку в левом нижнем углу интерфейса.

    // HelloWorld.qml import QtQuick 1.0 Rectangle  color: "beige" width: 100; height: 100 Text  anchors.centerIn: parent color: "chocolate" text: "Здравствуй, мир!" > MouseArea  anchors.fill: parent onClicked: Qt.quit() > > 

    Первая строка просто комментарий. Синтаксис комментариев такой же, как в C+. Строки, начинающиеся с // и текст, заключенный в /* … */ игнорируются. Вторая строка импортирует все стандартные компоненты: Rectangle, Image, Text, MouseArea, Flickable, … и т.д. Третья строка создает корневой узел вашей визуальной иерархии. Элемент Rectangle просто отображает прямоугольник закрашенный заданным цветом с возможностью закругления углов. Вы можете использовать любое из SVG названий цветов или задать цвет непосредственно с помощью RGB названия цветов. В нашем примере мы могли бы написать #F5F5DC вместо "beige". Размеры прямоугольника задается с помощью свойств width и height. Для каждого визуального элемента вы можете указать геометрию, используя свойства x, y, width и height задавая значения в пикселах. По большей части, это необходимо только для элементов верхнего уровня и анимации. После этого мы добавили два дочерние элемента: Text и MouseArea. Мы используем якоря, чтобы связать геометрию дети с родительской. Центр текстового элемента привязывается к родительскому центру. Попробуйте изменить размер окна, чтобы проверить это. Второй дочерний элемент MouseArea, стоит на якоре полностью перекрывающем его родителя. MouseArea является одним из невидимых элементов для захвата пользовательского ввода. Элемент называется MouseArea, но также обеспечивает поддержку событий нажатия и табуляции. Наконец MouseArea включает обработчик события onClicked, который вызывает функцию по умолчанию для завершения работы Qt Quick приложения.

    Язык QML

    QML это декларативный язык, который определяет иерархию объектов. Дерево объектов создается при загрузке QML файла. Для каждого объекта определяется набор свойств. В качестве значений свойств используются константы или выражения JavaScript. Значение свойств установленных как javascript выржения переоцениваются, если любые свойства используемые в выражении изменяются. Эта концепция декларирования свойств, которые зависят друг от друга и обновляются в реальном времени называется связыванием свойств (property binding) в QML. QML называют расширением JavaScript, но это также и улучшение. Хотя язык JavaScript использует утиную типизацию ( duck-typing ), в QML есть базовые типы и проверка синтаксиса при закрузке файлов. Например, пропробуйте выполнить следующие действия:

    import QtQuick 1.0 Rectangle  color: 0 > 

    При загрузке данного файла в qmlviewer декларативный контексты выдаст корректный отчет о несоответствии типа:

    file:///home/frank/gitorious/qml-demos/MyRectangle.qml:3:12: Invalid property assignment: color expected color: 0 

    Кроме того, в QML вы не можете изменить глобальный объект. Это обычно происходит случайно, когда вы забыли использовать var при объявлении локальных переменных. Это незначительные изменения, расширенный синтаксис JavaScript полностью совместим с JavaScript используемым в веб браузерах. Вы можете использовать встроенные объекты, такие как Date, Number или Math. Вы можете написать JavaScript код в отдельном JavaScript файле и импортировать его в ваш QML контекст. Вы также можете объявить JavaScript в рамках компонентов. Взгляните на следующий пример:

    import QtQuick 1.0 Rectangle  width: 100; height: 100 color: red(0.5) Rectangle  anchors.verticalCenter: parent.verticalCenter width: parent.width / 2 height: parent.height / 2 color: red(1.) > function red(v)  return '#''' Math.floor(v''' 255).toString(16)'' '0000'; > > 

    Здесь мы объявили функцию red для вычисления названий цветов оттенков красного.

    Стандартные компоненты Qt Quick

    Библиотека компонентов QtQuick предоставляет богатый набор анимационных элементов, элементов для обработки изображений, элементов обработки ввода и модель-представление элементов. Особое внимание уделяется специальным пользовательским интерфейсам, созданным в рамках встраиваемых и мобильных устройств. Есть основанные на якорях макеты и позиционеры, но есть и компоненты высокого уровня, такие как поля со списком или панели инструментов. Ведется постоянная работа над проектом под названием Qt Components который предоставляет такие высокоуровневые компоненты, но проект все еще находится на ранних стадиях.

    Retrieved from "https://wiki.qt.io/index.php?title=IntroductionQtQuick/ru&oldid=15968"

    • Articles needing cleanup
    • Developing with Qt::Qt Quick
    • Developing with Qt::Qt Quick::Tutorial

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *