SlideShare a Scribd company logo
1 of 13
QML – новый подход к построению GUI
Введение 	Подходы к построению десктопных приложений: Императивный Декларативный QML - это декларативный язык, предназначенный для описания пользовательского интерфейса программы. 	Сравнение: XAML CSS
Синтаксис 	Дерево объектов со свойствами: Rectangle {          id: canvas          width: 200          height: 200          color: "blue"  Image {  		            id: logo source: "pics/logo.png"  anchors.centerIn: parent          x: canvas.height / 5      }  }
Основные типы данных Item { x: 10.5 // a 'real' property state: "details"// a 'string' property focus: true // a 'bool' property ...  Item { x: 10.5 // a 'real' property state: "details"// a 'string' property focus: true // a 'bool' property ...  Item { x: 10.5 // a 'real' property state: "details"// a 'string' property focus: true // a 'bool' property ...  Item{          x: 10.5                  // a 'real' property         state: "details“   // a 'string' property         focus: true          // a 'bool' property} action bool color date enumeration font int list point real rect size string time url vector3d
Идентификаторы объектов Row {  Text {  			id: text1  			text: "Hello World"  		}  Text { text: text1.text }  } Идентификатор элемента виден во всей области компонента, в котором этот элемент находится
Выражения JavaScript – выражения могут быть использованы для назначения свойств элементов: Пример 1: Item {  width: 100 * 3  height: 50 + 22  } Пример 2: Item {          width: 300  height: 300  Rectangle{         width: parent.width - 50          height: 100  color: "yellow"  	  }  }
Соединения (Connections) Создает подключение к QML-сигналу: MouseArea {  id: area  } ...  Connections {  target: area  onClicked: foo(...)  } Преимущества: для одного сигнала можно написать несколько соединений создание связей за пределами сферы отправителя сигнала подключение к источникам не нужно предопределять
Сигналы. Обработка сигналов Обработка сигнала нажатия кнопки мыши: Item {  		width: 100;  		height: 100  MouseArea {  anchors.fill: parent  onClicked: {  				console.log("mouse button clicked")  			}  		} } Возможность создания собственных сигналов с последующей их обработкой
Состояния Это множество изменений по отношению к стандартной конфигурации элемента: Rectangle {  id: myRect width: 100; height: 100  color: "black"  MouseArea {  id: mouseArea anchors.fill: parent  onClicked:myRect.state == 'clicked' ?  myRect.state = "" :  myRect.state = 'clicked';  }  states: [  State {  name: "clicked"  PropertyChanges { target: myRect; color: "red" }  }  ]  }
Поведение элементов 	Поведение определяет анимации, которые должны применяться, когда изменяются определенные значения свойств элемента: Rectangle {  id: rect width: 100;  height: 100  color: "red"  Behavior on width {  NumberAnimation { duration: 1000 }  }  MouseArea {  anchors.fill: parent  onClicked: rect.width = 50  }  }
Анимация 	Свойства и методы анимации привязаны непосредственно к элементам QML: Rectangle {  	width: 100  	height: 100  	color: "green"  RotationAnimation on rotation {  		loops: Animation.Infinite 		from: 0 to: 360  	}  } Свойства, присущие для всех видов анимации: alwaysRunToEnd : bool loops : int paused : bool running : bool
Работа с мышью 	Для обработки сигналов, отправленных мышьюслужит элемент MouseArea: Rectangle {  	width: 100; height: 100  	color: "green"  MouseArea {  anchors.fill: parent  onClicked: { parent.color = 'red' }  	}  }
QML в С++ приложениях Создание и передача свойства «цвет» из C++ приложения в QML: // main.cpp #include <QApplication>  #include <QDeclarativeView>  #include <QDeclarativeContext>  int main(intargc, char *argv[]) {  QApplication app(argc, argv);  QDeclarativeView view;  QDeclarativeContext *context = view.rootContext();      context->setContextProperty("backgroundColor", QColor(Qt::yellow));     view.setSource(QUrl::fromLocalFile("main.qml"));  view.show();      return app.exec();  } // main.qml Rectangle {          width: 300          height: 300          color: backgroundColor Text {  anchors.centerIn: parent                  text: "Hello Yellow World!"           }  }

More Related Content

Similar to QML - новый подход к построению GUI

Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18OdessaFrontend
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машинRoman Dvornov
 
Статический анализ Си++ кода и новый стандарт языка C++0x
Статический анализ Си++ кода и новый стандарт языка C++0xСтатический анализ Си++ кода и новый стандарт языка C++0x
Статический анализ Си++ кода и новый стандарт языка C++0xTatyanazaxarova
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
 
Обзор программных средств Майкрософт для графики и визуализации: коммерческой...
Обзор программных средств Майкрософт для графики и визуализации: коммерческой...Обзор программных средств Майкрософт для графики и визуализации: коммерческой...
Обзор программных средств Майкрософт для графики и визуализации: коммерческой...Dmitri Soshnikov
 
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETОпыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETGoSharp
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Яковенко Кирилл
 
Вадим Дробинин (Vadim Drobinin) — iMessage Apps: от стикеров до банковских пр...
Вадим Дробинин (Vadim Drobinin) — iMessage Apps: от стикеров до банковских пр...Вадим Дробинин (Vadim Drobinin) — iMessage Apps: от стикеров до банковских пр...
Вадим Дробинин (Vadim Drobinin) — iMessage Apps: от стикеров до банковских пр...Vadim Drobinin
 
iMessage Apps: от стикеров до банковских приложений за 30 минут, Вадим Дробин...
iMessage Apps: от стикеров до банковских приложений за 30 минут, Вадим Дробин...iMessage Apps: от стикеров до банковских приложений за 30 минут, Вадим Дробин...
iMessage Apps: от стикеров до банковских приложений за 30 минут, Вадим Дробин...Mail.ru Group
 
IT Kitchen (Artem Levchenko)
IT Kitchen (Artem Levchenko)IT Kitchen (Artem Levchenko)
IT Kitchen (Artem Levchenko)Yury Bondarau
 

Similar to QML - новый подход к построению GUI (12)

Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
Canvas API как инструмент для работы с графикой | Odessa Frontend Meetup #18
 
CSS глазами машин
CSS глазами машинCSS глазами машин
CSS глазами машин
 
Статический анализ Си++ кода и новый стандарт языка C++0x
Статический анализ Си++ кода и новый стандарт языка C++0xСтатический анализ Си++ кода и новый стандарт языка C++0x
Статический анализ Си++ кода и новый стандарт языка C++0x
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
 
Обзор программных средств Майкрософт для графики и визуализации: коммерческой...
Обзор программных средств Майкрософт для графики и визуализации: коммерческой...Обзор программных средств Майкрософт для графики и визуализации: коммерческой...
Обзор программных средств Майкрософт для графики и визуализации: коммерческой...
 
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NETОпыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
Опыт разработки сложных клиент-серверных приложений на TypeScript и ASP.NET
 
Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3Лекция #5. Введение в язык программирования Python 3
Лекция #5. Введение в язык программирования Python 3
 
Net 3.0 & Linq
Net 3.0 & LinqNet 3.0 & Linq
Net 3.0 & Linq
 
Вадим Дробинин (Vadim Drobinin) — iMessage Apps: от стикеров до банковских пр...
Вадим Дробинин (Vadim Drobinin) — iMessage Apps: от стикеров до банковских пр...Вадим Дробинин (Vadim Drobinin) — iMessage Apps: от стикеров до банковских пр...
Вадим Дробинин (Vadim Drobinin) — iMessage Apps: от стикеров до банковских пр...
 
iMessage Apps: от стикеров до банковских приложений за 30 минут, Вадим Дробин...
iMessage Apps: от стикеров до банковских приложений за 30 минут, Вадим Дробин...iMessage Apps: от стикеров до банковских приложений за 30 минут, Вадим Дробин...
iMessage Apps: от стикеров до банковских приложений за 30 минут, Вадим Дробин...
 
IT Kitchen (Artem Levchenko)
IT Kitchen (Artem Levchenko)IT Kitchen (Artem Levchenko)
IT Kitchen (Artem Levchenko)
 
Js fuckworks
Js fuckworksJs fuckworks
Js fuckworks
 

QML - новый подход к построению GUI

  • 1. QML – новый подход к построению GUI
  • 2. Введение Подходы к построению десктопных приложений: Императивный Декларативный QML - это декларативный язык, предназначенный для описания пользовательского интерфейса программы. Сравнение: XAML CSS
  • 3. Синтаксис Дерево объектов со свойствами: Rectangle { id: canvas width: 200 height: 200 color: "blue" Image { id: logo source: "pics/logo.png" anchors.centerIn: parent x: canvas.height / 5 } }
  • 4. Основные типы данных Item { x: 10.5 // a 'real' property state: "details"// a 'string' property focus: true // a 'bool' property ... Item { x: 10.5 // a 'real' property state: "details"// a 'string' property focus: true // a 'bool' property ... Item { x: 10.5 // a 'real' property state: "details"// a 'string' property focus: true // a 'bool' property ... Item{ x: 10.5 // a 'real' property state: "details“ // a 'string' property focus: true // a 'bool' property} action bool color date enumeration font int list point real rect size string time url vector3d
  • 5. Идентификаторы объектов Row { Text { id: text1 text: "Hello World" } Text { text: text1.text } } Идентификатор элемента виден во всей области компонента, в котором этот элемент находится
  • 6. Выражения JavaScript – выражения могут быть использованы для назначения свойств элементов: Пример 1: Item { width: 100 * 3 height: 50 + 22 } Пример 2: Item { width: 300 height: 300 Rectangle{ width: parent.width - 50 height: 100 color: "yellow" } }
  • 7. Соединения (Connections) Создает подключение к QML-сигналу: MouseArea { id: area } ... Connections { target: area onClicked: foo(...) } Преимущества: для одного сигнала можно написать несколько соединений создание связей за пределами сферы отправителя сигнала подключение к источникам не нужно предопределять
  • 8. Сигналы. Обработка сигналов Обработка сигнала нажатия кнопки мыши: Item { width: 100; height: 100 MouseArea { anchors.fill: parent onClicked: { console.log("mouse button clicked") } } } Возможность создания собственных сигналов с последующей их обработкой
  • 9. Состояния Это множество изменений по отношению к стандартной конфигурации элемента: Rectangle { id: myRect width: 100; height: 100 color: "black" MouseArea { id: mouseArea anchors.fill: parent onClicked:myRect.state == 'clicked' ? myRect.state = "" : myRect.state = 'clicked'; } states: [ State { name: "clicked" PropertyChanges { target: myRect; color: "red" } } ] }
  • 10. Поведение элементов Поведение определяет анимации, которые должны применяться, когда изменяются определенные значения свойств элемента: Rectangle { id: rect width: 100; height: 100 color: "red" Behavior on width { NumberAnimation { duration: 1000 } } MouseArea { anchors.fill: parent onClicked: rect.width = 50 } }
  • 11. Анимация Свойства и методы анимации привязаны непосредственно к элементам QML: Rectangle { width: 100 height: 100 color: "green" RotationAnimation on rotation { loops: Animation.Infinite from: 0 to: 360 } } Свойства, присущие для всех видов анимации: alwaysRunToEnd : bool loops : int paused : bool running : bool
  • 12. Работа с мышью Для обработки сигналов, отправленных мышьюслужит элемент MouseArea: Rectangle { width: 100; height: 100 color: "green" MouseArea { anchors.fill: parent onClicked: { parent.color = 'red' } } }
  • 13. QML в С++ приложениях Создание и передача свойства «цвет» из C++ приложения в QML: // main.cpp #include <QApplication> #include <QDeclarativeView> #include <QDeclarativeContext> int main(intargc, char *argv[]) { QApplication app(argc, argv); QDeclarativeView view; QDeclarativeContext *context = view.rootContext(); context->setContextProperty("backgroundColor", QColor(Qt::yellow)); view.setSource(QUrl::fromLocalFile("main.qml")); view.show(); return app.exec(); } // main.qml Rectangle { width: 300 height: 300 color: backgroundColor Text { anchors.centerIn: parent text: "Hello Yellow World!" } }