SlideShare a Scribd company logo
Custom Modern Qt Quick 2
components
2
• Presentation
• Adrien Leravat (France)
• Embedded software engineer
• Adeneo Embedded
• France, Germany (Franckfurt), USA
• BSPs and OS porting to ARM (Linux, Windows,
Android, QNX)
• Embedded software architecture and development
• Mobile expertise (cloud, internet of things)
Introduction
3
Today’s UIs
People expect the best out of UIs
Sensors
Animations
Effects
Graphical
acceleration
Touch
Gestures
Modern
feeling
4
• Reminder: custom components can
be QML files or C++ classes
• QML file: collection of QML
components
• Quick & easy
• Limited to existing components
Your own components
[MyComponent.qml]
Rectangle {
width: 100
height: 100
color: “blue”
MouseArea {
anchors.fill: parent
onPressed: {
log.message(“Pressed !”);
}
}
}
Your own components
5
• Custom Item C++ class
• More effort
• More possibilities
• Custom painting
• Custom events handling
Your own components
[mycomponent.h]
class MyComponent : public QQuickItem {
Q_OBJECT
public:
MyComponent();
mousePressEvent(QMouseEvent*);
};
Plugins and
events
Handling Plugings and events
7
• Gestures part of everyday UIs
• Slide, pinch, rotate
• Now a natural way to interact
• Qt provides different ways to handle multi-touch
• More involving than single touch
Multi-touch
8
• Requirements
• Screen with multi-touch capability (ex:
capacitive screen)
• Appropriate driver
• Qt plugin handling multi-touch events for
Linux (EvdevTouch)
• Enjoy multi-touch events in Qt !
Multi-touch
9
Demo hardware and OS
• Freescale Sabre SDP, i.MX6
DualLite
• eGalax 10” capacitive
touchscreen
• Yocto 1.5, kernel 3.x
Qt side
• EvdevTouch plugin
• -plugin
EvdevTouch:/dev/input/touchscreen0
• PinchArea and custom
components
Multi-touch
 /dev/input/touchscreen0, evtest,
run options
10
• MouseArea
• Single touch
• Handles tap, press, release
• Flickable
• Single touch
• Scroll content
Multi-touch
• PinchArea
• Easy handling of drag,
scale and rotate
• MultiPointTouchArea
• Manual handling of single
touch points and behavior
• Custom QQuickItem class
• setAcceptedMouseButtons
• event / touchEvent
handlers
11
A few tips
Touch events converts to mouse events if not handled
• PinchArea / filters may interfere with MouseArea
“clicked” signal
• Use “pressed” signal
setFiltersChildMouseEvents
• Catch all children events, then filter or let go
grabTouchPoints, setKeepTouchGrab
Multi-touch
Polishing with effects
Animations and
shaders
Polishing with effects
13
• Effects can provides final polish,
or be part of the full experience
• Animating, to improve
user-friendliness
• Blurring UI to
strengthen focus
• Aesthetics and behavior
Polishing with effects
14
• Animations from QML
• Behavior
• PropertyAnimation
• State / Transition animations
Polishing with effects
MyButton {
width: 100
height: 100
color: “blue”
Behavior on x {
NumberAnimation {
duration: 500
easing.type: Easing.OutQuad
}
}
}
15
• Animations from C++ Item class
• QPropertyAnimation
• Same parameters as QML animations
• Needs corresponding Q_PROPERTY
Polishing with effects
QPropertyAnimation *anim = new
QPropertyAnimation();
anim->setTargetObject(this);
anim->setPropertyName(“x”)
anim->setDuration(500);
anim->setEndValue(newXValue);
anim->start();
16
Qt Graphical Effect
• import QtGraphicalEffects 1.0
• GaussianBlur, FastBlur,
RecursiveBlur
• Fade part of the UI, focus on
important parts
• DropShadow, Glow, RectangularGlow
• Makes components stand out
Multitouch
Click me !
OpenGL drawings
Make it faster !
18
• Fluidity and responsiveness are critical
• Challenging on embedded devices
• Since Qt 5, full OpenGL acceleration for QtQuick
• Backend provides graphical acceleration
• Eglfs is the common choice on linux
• MyApp –platform eglfs
Context Context
19
• Qt Quick 1
• QDeclarativeItem
• QDeclarativeItem inherited QGraphicsItem
• paint() method with QPainter
• Qt Quick 2
• QQuickItem
• QQuickItem inherits QObject
• No paint() method !
Qt Quick item class
20
• How to draw QtQuick2 item ?
• QQuickPaintedItem (QQuickItem)
• Implement paint() method (QPainter drawing)
• Convenience class, don’t fully leverage Scene
Graph and OpenGL
• Suited for light components
QQuickPaintedItem
21
• Scene graph
• Relies on Opengl / Opengl ES
• State aware to minimize overhead
• Render thread
• Performs optimizations
• Material sorting
• Ignore obstructed items
Scene graph
Scene
22
• Scene graph nodes
• Each item is internally a
node
• Each node contains all its
children
• A node can be a visible
item, or provide
functionality
• Opacity, transformation
Scene graph
Scene
23
How to leverage Qt Quick2 performances?
• Inherit QQuickItem
• setFlag, ItemHasContents
• Implement updatePaintNode method
• Use Scene Graph classes (QSG*)
• update() to trigger updatePaintNode when
needed
Qt Quick 2 item class
24
• oldNode holds the previous state of the node
• Null until initialized
• Contains its type and hierarchy
• Set its color and geometry
First accelerated item
QSGNode *MyItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
{
QSGSimpleRectNode *n = static_cast<QSGSimpleRectNode *>(oldNode);
if ( ! n ) {
n = new QSGSimpleRectNode();
n->setColor(Qt::red);
}
n->setRect(boundingRect());
return n;
}
25
• Draw exclusively in the render thread, avoid classes other
than QSG*
• Main thread is blocked during rendering, access to items data
is safe
• Newly created QObject-based classes are running on
rendering thread
• Signals targeting main thread will be queued
Caveats
26
QSGNode
QSGTransformNode
QSGOpacityNode
QSGClipNode
QSGGeometryNode
Node Class
Text text
• setMatrix()
• setOpacity()
• setClipRect()
• setMaterial()
• setGeometry()
27
QSGNode
QSGGeometryNode
- Base class of visual elements
- Holds Geometry and materials
QSGSimpleRectNode
- Rectangle, color
QSGSimpleTextureNode
- Rectangle, texture
Node Class
28
QSGGeometryNode
• Geometry (vertices)
• QSGGeometry
• Points, lines, triangles
Geometry node
QSGGeometry *geometry = new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), 2);
geometry->setDrawingMode(GL_LINES);
geometry->setLineWidth(3);
geometry->vertexDataAsPoint2D()[0].set(0, 0);
geometry->vertexDataAsPoint2D()[1].set(width(), height());
QSGGeometryNode *node = new QSGGeometryNode;
node->setGeometry(geometry);
node->setFlag(QSGNode::OwnsGeometry);
29
QSGGeometryNode
• Material (shader)
• QSGMaterial, QSGFlatColorMaterial,
QSGSimpleMaterialShader
• Vertex and fragment shaders
• Attributes, uniforms
Geometry node
QSGFlatColorMaterial *material = new QSGFlatColorMaterial;
material->setColor(QColor(255, 0, 0));
QSGGeometryNode *node = new QSGGeometryNode;
node->setMaterial(material);
node->setFlag(QSGNode::OwnsMaterial);
30
• Fully leveraging OpenGL acceleration require some work
• Needs some basic knowledge of OpenGL (vertices, textures,
shaders)
• QQuickPaintedItem when performance is not critical
Sum up
Polishing with effects
Accelerometer
Sensors to adapt to user
32
• Platform / hardware specific Qt Sensor plugin
• Support of your sensor may require creating a new
sensor plugin
• Direct access to drivers data
• Handling accelerometer
• QAccelerometer, QAccelerometerReading (based on
QSensor)
Accelerometer
33
• Create your own
• Duplicate one of the existing Qt sensor plugin
(qtbase/plugins/sensors)
• Composed of
• Sensor factory: QSensorPluginInterface,
QSensorBackendFactory
• Sensor: QSensorBackend
• Reimplement start/stop/poll methods
• Open your driver, read and parse
Accelerometer
34
• Reports x, y, z accelerations
• Commonly used to adapt
display to device orientation
• Set accelerationMode to “Gravity”
• Rotate root item, load alternative UI, …
Accelerometer
35
• Qt let you create modern application
• Only needs your finger skills !
• Possibilities aren’t always visible to marketing
and designers…
Final words
 Enlight them
 Enjoy your work
!

More Related Content

PDF
Build your own private Cloud environment
Nico Meisenzahl
 
PDF
Build your First IoT Application with IBM Watson IoT
Janakiram MSV
 
PDF
Automate your development and operation processes!
Nico Meisenzahl
 
PDF
Qt Application Programming with C++ - Part 1
Emertxe Information Technologies Pvt Ltd
 
PDF
Informix on Docker Hub
Pradeep Natarajan
 
PDF
Triangle Devops Meetup 10/2015
aspyker
 
PDF
Netflix Cloud Platform and Open Source
aspyker
 
PPTX
UI Programming with Qt-Quick and QML
Emertxe Information Technologies Pvt Ltd
 
Build your own private Cloud environment
Nico Meisenzahl
 
Build your First IoT Application with IBM Watson IoT
Janakiram MSV
 
Automate your development and operation processes!
Nico Meisenzahl
 
Qt Application Programming with C++ - Part 1
Emertxe Information Technologies Pvt Ltd
 
Informix on Docker Hub
Pradeep Natarajan
 
Triangle Devops Meetup 10/2015
aspyker
 
Netflix Cloud Platform and Open Source
aspyker
 
UI Programming with Qt-Quick and QML
Emertxe Information Technologies Pvt Ltd
 

Similar to Witekio custom modern qt quick components (20)

PDF
Petri Niemi Qt Advanced Part 1
NokiaAppForum
 
PDF
writing-custom-qtquickcomponents-QtCon.pdf
thaonguyen530606
 
PDF
Copy Your Favourite Nokia App with Qt
account inactive
 
PDF
“ONNX and Python to C++: State-of-the-art Graph Compilation,” a Presentation ...
Edge AI and Vision Alliance
 
PDF
The Future of Qt Widgets
account inactive
 
PDF
The Future of Qt Widgets
Marius Bugge Monsen
 
PDF
Best Practices in Qt Quick/QML - Part 1 of 4
ICS
 
PDF
Introduction to QML
Alan Uthoff
 
PDF
Cocos2d 소개 - Korea Linux Forum 2014
Changwon National University
 
PDF
Petri Niemi Qt Advanced Part 2
NokiaAppForum
 
PPT
Intro_OpenCV.ppt
RithikRaj25
 
PPTX
Best Practices in Qt Quick/QML - Part I
ICS
 
PDF
Introduction to the Qt Quick Scene Graph
ICS
 
PDF
Qt for beginners part 4 doing more
ICS
 
PDF
Qt Graphics View Framework (Qt Developers Meetup Isreal)
vitalipe
 
PDF
Scripting Your Qt Application
account inactive
 
PPTX
Hello, QML
Jack Yang
 
PDF
Fun with QML
ICS
 
KEY
Core animation
Weizhong Yang
 
Petri Niemi Qt Advanced Part 1
NokiaAppForum
 
writing-custom-qtquickcomponents-QtCon.pdf
thaonguyen530606
 
Copy Your Favourite Nokia App with Qt
account inactive
 
“ONNX and Python to C++: State-of-the-art Graph Compilation,” a Presentation ...
Edge AI and Vision Alliance
 
The Future of Qt Widgets
account inactive
 
The Future of Qt Widgets
Marius Bugge Monsen
 
Best Practices in Qt Quick/QML - Part 1 of 4
ICS
 
Introduction to QML
Alan Uthoff
 
Cocos2d 소개 - Korea Linux Forum 2014
Changwon National University
 
Petri Niemi Qt Advanced Part 2
NokiaAppForum
 
Intro_OpenCV.ppt
RithikRaj25
 
Best Practices in Qt Quick/QML - Part I
ICS
 
Introduction to the Qt Quick Scene Graph
ICS
 
Qt for beginners part 4 doing more
ICS
 
Qt Graphics View Framework (Qt Developers Meetup Isreal)
vitalipe
 
Scripting Your Qt Application
account inactive
 
Hello, QML
Jack Yang
 
Fun with QML
ICS
 
Core animation
Weizhong Yang
 
Ad

More from Witekio (17)

PDF
IoT & Embedded systems development
Witekio
 
PDF
IoT Device Security
Witekio
 
PPTX
Conference Security by Design - Microsoft - Relever les défis de la sécurité ...
Witekio
 
PPTX
Conference Security by Design - Gemalto - Security in IoT
Witekio
 
PPTX
Conference Security by Design - Lacroix Electronics - Comment conçoit on un o...
Witekio
 
PDF
Machine learning - AI
Witekio
 
PDF
Evoca Group - Smart connected coffee vending machine
Witekio
 
PDF
Containers demystified webinar detailed
Witekio
 
PDF
Witekio Corporate presentation H2 2017
Witekio
 
PDF
Why you should join Witekio
Witekio
 
PDF
Witekio introducing-predictive-maintenance
Witekio
 
PPTX
System Software Integration, Witekio
Witekio
 
PPTX
Witekio Corporate Presentation Q42016
Witekio
 
PPTX
Continuous Integration for BSP
Witekio
 
PPTX
Witekio Qt and Android
Witekio
 
PPTX
Witekio IoT presentation
Witekio
 
PPTX
Adeneo Embedded stay tuned
Witekio
 
IoT & Embedded systems development
Witekio
 
IoT Device Security
Witekio
 
Conference Security by Design - Microsoft - Relever les défis de la sécurité ...
Witekio
 
Conference Security by Design - Gemalto - Security in IoT
Witekio
 
Conference Security by Design - Lacroix Electronics - Comment conçoit on un o...
Witekio
 
Machine learning - AI
Witekio
 
Evoca Group - Smart connected coffee vending machine
Witekio
 
Containers demystified webinar detailed
Witekio
 
Witekio Corporate presentation H2 2017
Witekio
 
Why you should join Witekio
Witekio
 
Witekio introducing-predictive-maintenance
Witekio
 
System Software Integration, Witekio
Witekio
 
Witekio Corporate Presentation Q42016
Witekio
 
Continuous Integration for BSP
Witekio
 
Witekio Qt and Android
Witekio
 
Witekio IoT presentation
Witekio
 
Adeneo Embedded stay tuned
Witekio
 
Ad

Recently uploaded (20)

PDF
MiniTool Power Data Recovery Crack New Pre Activated Version Latest 2025
imang66g
 
PDF
10 posting ideas for community engagement with AI prompts
Pankaj Taneja
 
PDF
Balancing Resource Capacity and Workloads with OnePlan – Avoid Overloading Te...
OnePlan Solutions
 
DOCX
Can You Build Dashboards Using Open Source Visualization Tool.docx
Varsha Nayak
 
PPTX
AI-Ready Handoff: Auto-Summaries & Draft Emails from MQL to Slack in One Flow
bbedford2
 
PPTX
ASSIGNMENT_1[1][1][1][1][1] (1) variables.pptx
kr2589474
 
PDF
New Download FL Studio Crack Full Version [Latest 2025]
imang66g
 
PPTX
Presentation about Database and Database Administrator
abhishekchauhan86963
 
PPTX
Maximizing Revenue with Marketo Measure: A Deep Dive into Multi-Touch Attribu...
bbedford2
 
PPTX
The-Dawn-of-AI-Reshaping-Our-World.pptxx
parthbhanushali307
 
PDF
Enhancing Healthcare RPM Platforms with Contextual AI Integration
Cadabra Studio
 
PPTX
Presentation about variables and constant.pptx
safalsingh810
 
PDF
An Experience-Based Look at AI Lead Generation Pricing, Features & B2B Results
Thomas albart
 
PDF
vAdobe Premiere Pro 2025 (v25.2.3.004) Crack Pre-Activated Latest
imang66g
 
PDF
Download iTop VPN Free 6.1.0.5882 Crack Full Activated Pre Latest 2025
imang66g
 
PDF
Exploring AI Agents in Process Industries
amoreira6
 
PPT
Why Reliable Server Maintenance Service in New York is Crucial for Your Business
Sam Vohra
 
PDF
Immersive experiences: what Pharo users do!
ESUG
 
PDF
Adobe Illustrator Crack Full Download (Latest Version 2025) Pre-Activated
imang66g
 
PPTX
Web Testing.pptx528278vshbuqffqhhqiwnwuq
studylike474
 
MiniTool Power Data Recovery Crack New Pre Activated Version Latest 2025
imang66g
 
10 posting ideas for community engagement with AI prompts
Pankaj Taneja
 
Balancing Resource Capacity and Workloads with OnePlan – Avoid Overloading Te...
OnePlan Solutions
 
Can You Build Dashboards Using Open Source Visualization Tool.docx
Varsha Nayak
 
AI-Ready Handoff: Auto-Summaries & Draft Emails from MQL to Slack in One Flow
bbedford2
 
ASSIGNMENT_1[1][1][1][1][1] (1) variables.pptx
kr2589474
 
New Download FL Studio Crack Full Version [Latest 2025]
imang66g
 
Presentation about Database and Database Administrator
abhishekchauhan86963
 
Maximizing Revenue with Marketo Measure: A Deep Dive into Multi-Touch Attribu...
bbedford2
 
The-Dawn-of-AI-Reshaping-Our-World.pptxx
parthbhanushali307
 
Enhancing Healthcare RPM Platforms with Contextual AI Integration
Cadabra Studio
 
Presentation about variables and constant.pptx
safalsingh810
 
An Experience-Based Look at AI Lead Generation Pricing, Features & B2B Results
Thomas albart
 
vAdobe Premiere Pro 2025 (v25.2.3.004) Crack Pre-Activated Latest
imang66g
 
Download iTop VPN Free 6.1.0.5882 Crack Full Activated Pre Latest 2025
imang66g
 
Exploring AI Agents in Process Industries
amoreira6
 
Why Reliable Server Maintenance Service in New York is Crucial for Your Business
Sam Vohra
 
Immersive experiences: what Pharo users do!
ESUG
 
Adobe Illustrator Crack Full Download (Latest Version 2025) Pre-Activated
imang66g
 
Web Testing.pptx528278vshbuqffqhhqiwnwuq
studylike474
 

Witekio custom modern qt quick components

  • 1. Custom Modern Qt Quick 2 components
  • 2. 2 • Presentation • Adrien Leravat (France) • Embedded software engineer • Adeneo Embedded • France, Germany (Franckfurt), USA • BSPs and OS porting to ARM (Linux, Windows, Android, QNX) • Embedded software architecture and development • Mobile expertise (cloud, internet of things) Introduction
  • 3. 3 Today’s UIs People expect the best out of UIs Sensors Animations Effects Graphical acceleration Touch Gestures Modern feeling
  • 4. 4 • Reminder: custom components can be QML files or C++ classes • QML file: collection of QML components • Quick & easy • Limited to existing components Your own components [MyComponent.qml] Rectangle { width: 100 height: 100 color: “blue” MouseArea { anchors.fill: parent onPressed: { log.message(“Pressed !”); } } } Your own components
  • 5. 5 • Custom Item C++ class • More effort • More possibilities • Custom painting • Custom events handling Your own components [mycomponent.h] class MyComponent : public QQuickItem { Q_OBJECT public: MyComponent(); mousePressEvent(QMouseEvent*); };
  • 7. 7 • Gestures part of everyday UIs • Slide, pinch, rotate • Now a natural way to interact • Qt provides different ways to handle multi-touch • More involving than single touch Multi-touch
  • 8. 8 • Requirements • Screen with multi-touch capability (ex: capacitive screen) • Appropriate driver • Qt plugin handling multi-touch events for Linux (EvdevTouch) • Enjoy multi-touch events in Qt ! Multi-touch
  • 9. 9 Demo hardware and OS • Freescale Sabre SDP, i.MX6 DualLite • eGalax 10” capacitive touchscreen • Yocto 1.5, kernel 3.x Qt side • EvdevTouch plugin • -plugin EvdevTouch:/dev/input/touchscreen0 • PinchArea and custom components Multi-touch  /dev/input/touchscreen0, evtest, run options
  • 10. 10 • MouseArea • Single touch • Handles tap, press, release • Flickable • Single touch • Scroll content Multi-touch • PinchArea • Easy handling of drag, scale and rotate • MultiPointTouchArea • Manual handling of single touch points and behavior • Custom QQuickItem class • setAcceptedMouseButtons • event / touchEvent handlers
  • 11. 11 A few tips Touch events converts to mouse events if not handled • PinchArea / filters may interfere with MouseArea “clicked” signal • Use “pressed” signal setFiltersChildMouseEvents • Catch all children events, then filter or let go grabTouchPoints, setKeepTouchGrab Multi-touch
  • 12. Polishing with effects Animations and shaders Polishing with effects
  • 13. 13 • Effects can provides final polish, or be part of the full experience • Animating, to improve user-friendliness • Blurring UI to strengthen focus • Aesthetics and behavior Polishing with effects
  • 14. 14 • Animations from QML • Behavior • PropertyAnimation • State / Transition animations Polishing with effects MyButton { width: 100 height: 100 color: “blue” Behavior on x { NumberAnimation { duration: 500 easing.type: Easing.OutQuad } } }
  • 15. 15 • Animations from C++ Item class • QPropertyAnimation • Same parameters as QML animations • Needs corresponding Q_PROPERTY Polishing with effects QPropertyAnimation *anim = new QPropertyAnimation(); anim->setTargetObject(this); anim->setPropertyName(“x”) anim->setDuration(500); anim->setEndValue(newXValue); anim->start();
  • 16. 16 Qt Graphical Effect • import QtGraphicalEffects 1.0 • GaussianBlur, FastBlur, RecursiveBlur • Fade part of the UI, focus on important parts • DropShadow, Glow, RectangularGlow • Makes components stand out Multitouch Click me !
  • 18. 18 • Fluidity and responsiveness are critical • Challenging on embedded devices • Since Qt 5, full OpenGL acceleration for QtQuick • Backend provides graphical acceleration • Eglfs is the common choice on linux • MyApp –platform eglfs Context Context
  • 19. 19 • Qt Quick 1 • QDeclarativeItem • QDeclarativeItem inherited QGraphicsItem • paint() method with QPainter • Qt Quick 2 • QQuickItem • QQuickItem inherits QObject • No paint() method ! Qt Quick item class
  • 20. 20 • How to draw QtQuick2 item ? • QQuickPaintedItem (QQuickItem) • Implement paint() method (QPainter drawing) • Convenience class, don’t fully leverage Scene Graph and OpenGL • Suited for light components QQuickPaintedItem
  • 21. 21 • Scene graph • Relies on Opengl / Opengl ES • State aware to minimize overhead • Render thread • Performs optimizations • Material sorting • Ignore obstructed items Scene graph Scene
  • 22. 22 • Scene graph nodes • Each item is internally a node • Each node contains all its children • A node can be a visible item, or provide functionality • Opacity, transformation Scene graph Scene
  • 23. 23 How to leverage Qt Quick2 performances? • Inherit QQuickItem • setFlag, ItemHasContents • Implement updatePaintNode method • Use Scene Graph classes (QSG*) • update() to trigger updatePaintNode when needed Qt Quick 2 item class
  • 24. 24 • oldNode holds the previous state of the node • Null until initialized • Contains its type and hierarchy • Set its color and geometry First accelerated item QSGNode *MyItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) { QSGSimpleRectNode *n = static_cast<QSGSimpleRectNode *>(oldNode); if ( ! n ) { n = new QSGSimpleRectNode(); n->setColor(Qt::red); } n->setRect(boundingRect()); return n; }
  • 25. 25 • Draw exclusively in the render thread, avoid classes other than QSG* • Main thread is blocked during rendering, access to items data is safe • Newly created QObject-based classes are running on rendering thread • Signals targeting main thread will be queued Caveats
  • 26. 26 QSGNode QSGTransformNode QSGOpacityNode QSGClipNode QSGGeometryNode Node Class Text text • setMatrix() • setOpacity() • setClipRect() • setMaterial() • setGeometry()
  • 27. 27 QSGNode QSGGeometryNode - Base class of visual elements - Holds Geometry and materials QSGSimpleRectNode - Rectangle, color QSGSimpleTextureNode - Rectangle, texture Node Class
  • 28. 28 QSGGeometryNode • Geometry (vertices) • QSGGeometry • Points, lines, triangles Geometry node QSGGeometry *geometry = new QSGGeometry(QSGGeometry::defaultAttributes_Point2D(), 2); geometry->setDrawingMode(GL_LINES); geometry->setLineWidth(3); geometry->vertexDataAsPoint2D()[0].set(0, 0); geometry->vertexDataAsPoint2D()[1].set(width(), height()); QSGGeometryNode *node = new QSGGeometryNode; node->setGeometry(geometry); node->setFlag(QSGNode::OwnsGeometry);
  • 29. 29 QSGGeometryNode • Material (shader) • QSGMaterial, QSGFlatColorMaterial, QSGSimpleMaterialShader • Vertex and fragment shaders • Attributes, uniforms Geometry node QSGFlatColorMaterial *material = new QSGFlatColorMaterial; material->setColor(QColor(255, 0, 0)); QSGGeometryNode *node = new QSGGeometryNode; node->setMaterial(material); node->setFlag(QSGNode::OwnsMaterial);
  • 30. 30 • Fully leveraging OpenGL acceleration require some work • Needs some basic knowledge of OpenGL (vertices, textures, shaders) • QQuickPaintedItem when performance is not critical Sum up
  • 32. 32 • Platform / hardware specific Qt Sensor plugin • Support of your sensor may require creating a new sensor plugin • Direct access to drivers data • Handling accelerometer • QAccelerometer, QAccelerometerReading (based on QSensor) Accelerometer
  • 33. 33 • Create your own • Duplicate one of the existing Qt sensor plugin (qtbase/plugins/sensors) • Composed of • Sensor factory: QSensorPluginInterface, QSensorBackendFactory • Sensor: QSensorBackend • Reimplement start/stop/poll methods • Open your driver, read and parse Accelerometer
  • 34. 34 • Reports x, y, z accelerations • Commonly used to adapt display to device orientation • Set accelerationMode to “Gravity” • Rotate root item, load alternative UI, … Accelerometer
  • 35. 35 • Qt let you create modern application • Only needs your finger skills ! • Possibilities aren’t always visible to marketing and designers… Final words  Enlight them  Enjoy your work !