SlideShare a Scribd company logo
© Integrated Computer Solutions, Inc. All Rights Reserved
Migrating from
QNX Photon to Qt
Bobby Chawla <bchawla@ics.com>
Integrated Computer Solutions, Inc.
© Integrated Computer Solutions, Inc. All Rights Reserved
Introduction
● Working with ICS for about four years now
● Taste for real-time software development
● Used to work with Process Control Systems for industry:
○ Pulp & Paper machines
○ Lots of QNX development
● Offered to work on QNX itself
● About five years developing various parts of Photon
© Integrated Computer Solutions, Inc. All Rights Reserved
Agenda
● Introduction
● What is (was) Photon?
● What is Qt?
● Anatomy of an application
● Architecture differences
● Qt Signals and slots
● Widget comparisons
● When to port
● Porting from QNX
● Conclusion
© Integrated Computer Solutions, Inc. All Rights Reserved
What is (was) Photon?
● Photon : A name with multiple meanings:
○ Light particle
○ QNX/Photon MicroGUI
■ typically used with Neutrino
○ Photon UI project (Javascript framework to create UIs)
○ Photon OS distribution
… Probably More … .
© Integrated Computer Solutions, Inc. All Rights Reserved
What is (was) Photon?
● Photon : A name with multiple meanings:
○ Light particle
○ QNX/Photon MicroGUI
■ typically used with Neutrino
○ Photon UI project (Javascript framework to create UIs)
○ Photon OS distribution
We are talking about the QNX/Photon MicroGUI .
© Integrated Computer Solutions, Inc. All Rights Reserved
What is (was) Photon… cont. ● Started in the Mid-90s
● Had a Windows 95 look and feel:
○ “modern” at the time
● Evolved with more GUI options
© Integrated Computer Solutions, Inc. All Rights Reserved
What is(was) Photon… cont.
● Deprecated Could say Depreciated - Appropriate verb
● QNX v6.32 - Full implementation
● QNX v6.4 - Reduced widget set:
○ Removed browser & email applications
○ Removed PtTerminal
■ though PtTty was still there
● QNX v6.5 - Essentially the windowing system was still there:
○ But not designed to be a desktop OS
● QNX v6.6 - Unsupported:
○ But die-hards could import the 6.5 executables
● QNX v7 - Unavailable - Now it’s deprecated
© Integrated Computer Solutions, Inc. All Rights Reserved
What is Qt?
● Cross-platform application framework
● Supports all major desktop, mobile, embedded platforms
○ Windows, Mac OS, Linux, iOS, Android, QNX, etc.
● Written in C++
● Not just for GUI, but includes portable abstraction for most OS features
○ File i/o, strings, containers, networking, etc.
● Around since 1991
● Used by approximately 1 million developers in over 70 industries
● Owned by The Qt Company
● Available under GPL/LGPL and commercial licenses
© Integrated Computer Solutions, Inc. All Rights Reserved
What is Qt? - Qt Widgets
● Traditional building blocks for
GUI applications in Qt:
○ e.g. QButton, QLabel,
QTextEdit
● Can use Qt Designer - a GUI
builder for designing dialogs and
screens
● Have native look on each
platform
● Originally designed for desktop
applications, but also usable on
mobile and embedded.
© Integrated Computer Solutions, Inc. All Rights Reserved
What is Qt? - QML (aka Qt Quick)
● Simple JSON-like declarative language
● Provides basic elements to build up user interfaces
● Elements support properties, signals, methods
● Makes it easy to define animated, fluid, touchscreen interfaces
● Qt Quick Controls provide widget-like UI elements
● Backed by full JavaScript engine
● Qt Creator IDE has a QML Designer
○ developers typically write code by hand (QML Designer getting better)
● Mostly targeted at mobile and embedded
○ but also supported on desktop platforms
© Integrated Computer Solutions, Inc. All Rights Reserved
What is Qt? - Qt on QNX
● Qt has been available as an option for QNX development since 2010
● Qt widgets provide similar classes and mechanisms to Photon’s
● Typically find source code to Qt, configure for QNX, and compile
● Given the current customer base of QNX-7 - QNX is encouraging QML:
○ Partially configured for QML already in Momentics
○ Since this presentation is about porting from Photon,
■ we will focus on Qt widgets
© Integrated Computer Solutions, Inc. All Rights Reserved
Anatomy of an Application
● At a high level, both Photon & Qt GUI applications are:
○ Event driven
○ Similar parent/child relationships
■ parent window
■ every widget has a parent which helps keep things organized
● e.g. when the parent gets deleted, the child cleans up as well
■ dialogs - children of parent’s windows
○ Interactions
■ Photon uses callbacks vs. Qt using “signals and slots”
○ Qt separates widgets from layout managers
© Integrated Computer Solutions, Inc. All Rights Reserved
Architecture Differences
● Photon (conceptually) is an entire graphical system:
○ Though not as well documented, just as easy to create an app that captures
Photon events, thus being able to create your own:
■ graphics driver
■ mouse controller
■ screen capture app
■ virtual keyboard
■ other IO device
© Integrated Computer Solutions, Inc. All Rights Reserved
Architecture Differences… cont.
● Those of you familiar with Photon will know about:
○ Pg….() functions - Raw graphics functions
○ Ph….() functions - Open Photon channels, create regions, collect/emit
events
○ Pt….() functions - Create, Manipulate & Destroy widgets
● Qt:
○ Qt widget classes map mostly to Pt….() functions
○ Mature ecosystem of other classes for portability & convenience
■ e.g. stacks, accessing filesystem, strings
© Integrated Computer Solutions, Inc. All Rights Reserved
Architecture Differences… cont.
● Typically Qt is run in a third-party’s windowing environment:
○ Qt has backends for different graphics rendering environments
■ X11/xcb, OpenGL/ES, Linux frame buffer, etc.
■ look & feel designed to look native on the device
● same application looks/behaves slightly differently on a Mac than on
Linux or Windows
○ If working with a specialized board
■ need to speak with the hardware (BSP) vendor to interface with new
devices
© Integrated Computer Solutions, Inc. All Rights Reserved
Architecture Differences… cont.
Application development: PhAB , Qt Designer (GUI builder) & Qt Creator (IDE).
© Integrated Computer Solutions, Inc. All Rights Reserved
Architecture Differences… cont.
● Photon uses “PhAB”,
● Can compile/link in PhAB
● PhAB - not your average
application builder:
○ No source code created for
PhAB windows/dialog
○ GUI component info
written as binary data as
part of the executable
© Integrated Computer Solutions, Inc. All Rights Reserved
Architecture Differences… cont.
● Qt Creator (and Designer) is
not your average application
builder either:
○ Full development suite
○ Architecture-safe classes
○ PhAB/Photon users will
appreciate how easily tasks
get done (e.g. menus)
© Integrated Computer Solutions, Inc. All Rights Reserved
Architecture Differences… menus
© Integrated Computer Solutions, Inc. All Rights Reserved
Qt Signals & Slots
● Another term that can have different meanings: “Signals”:
○ QNX developers associate “Signals” as an operating system message
■ Signal can be passed from one process to another
■ Interrupts the receiving process, and process the signal
■ The call does not block the calling process
● Qt “Signals” are not the same as Linux/POSIX signals above:
○ Qt Signals & Slots are a one-to-many messaging system that lets Qt
“Objects” communicate within a process
○ Could be blocking function call, or could be queued
○ No “return” values from a signal
● Which differ from Boost Signals/Slots - allow return values from the “slots”
© Integrated Computer Solutions, Inc. All Rights Reserved
Qt Signals & Slots… cont.
● Qt signals are an expanded form of callbacks that allow separation of UI
elements from business logic
● Signals are emitted by Qt objects when event occurs (e.g. button pressed)
● Slots are methods that can be called in response to a signal
● Typically connect signals and slots at run-time
● Qt uses “moc” tool to generate meta object information about signals/slots
● Type safe alternative to callbacks, checked at compile time or run time
© Integrated Computer Solutions, Inc. All Rights Reserved
Widget Comparison - Menus and Options
Functionality Photon Qt Major Differences
Horizontal Menubar PtMenuBar QMenuBar QMenuBar has several insert Item
methods.
Pulldown Popup Menu PtMenu QMenu Qt provides a cleaner abstraction
using QMenu.
The common object for pulldowns
popups, and menubars
Menu button PtMenuButton QMenu
Combo Box PtComboBox QComboBox
Toggle or Multiple-selection
options
PtToggleButton
(Pt_TOGGLE_RADIO)
QRadioButton or
QCheckBox
© Integrated Computer Solutions, Inc. All Rights Reserved
Widget Comparison - Dialogs
Functionality Photon Qt
Error PtAlert() QErrorMessage
Information PtNotice() QMessageBox
Question PtAlert() QMessageBox
Warning PtAlert() QMessageBox
Progress PtProgress widget QProgressDialog
Simple Input PtPrompt() QInputDialog
File Chooser PtFileSelection() QFileDialog
HTML/Web display PtWebClient widget QWebView
Generic/Custom PtWindow container QDialog
● Italicized Photon
items (such as
PtAlert()) are
convenience
functions which
use widgets to
build a dialog
© Integrated Computer Solutions, Inc. All Rights Reserved
Widget Comparison… cont.
● Examples of widgets that are not 1 to 1 relationships:
○ PtTimer
○ RtTrend
● Qt has a large user base with many contributors:
○ Many sophisticated Qt widgets that don't exist in Photon are available from
3rd
party vendors
© Integrated Computer Solutions, Inc. All Rights Reserved
Widget Comparison - Containers vs. Layouts
● PtContainer (or it’s subclasses) allow the automatic placement of widgets in a:
○ FILL_LAYOUT (Horizontal / Vertical)
○ ROW_LAYOUT (Horizontal/Vertical with options for Justify, Wrap and Pack)
○ GRID_LAYOUT
○ ANCHOR_LAYOUT
● In Qt, layouts are more sophisticated:
○ Layouts are separated from any widget subclassed off of QWidget
○ Container widgets can manage their children using QWidget::setLayout()
© Integrated Computer Solutions, Inc. All Rights Reserved
When to Port / When to Consider Rewrite
● Photon is deprecated / newer hardware not supported
○ Eventually will run out of hardware options
○ Or user expectations for a device increase
● What code can you typically keep and what do you need to rewrite?
● Design aspects that makes it easier to port, e. g.
○ Good separation of UI and business logic.
○ Much of your application can be dissected into Model-View-Controller
(MVC) portions
© Integrated Computer Solutions, Inc. All Rights Reserved
Object Oriented Design 101
● Qt is based off C++:
○ Photon apps are usually ‘C’ based
○ Need to port some or all of your code to C++.
○ Your team may need to learn object-oriented design.
○ May require re-architecting (e.g. to separate GUI from business logic).
● C++ applications typically better at compartmentalizing,
○ Scale better for larger projects
© Integrated Computer Solutions, Inc. All Rights Reserved
Object
Oriented
Design
“101”
© Integrated Computer Solutions, Inc. All Rights Reserved
Object Oriented Design 101… cont.
● Created the same application in Photon & Qt
● In Photon had a functional relation PtText → callback → PtSetArg( PtLabel )
● Can do a similar connection with Qt:
○ QLineEdit → signal to QObject::AddHello → signal to QLabel
● However, a cleaner implementation is to create a ‘Hello’ widget:
○ Create a QHelloLabel as a subclass of QLabel,
○ QHelloLabel displays the string with ‘Hello’ prepended
○ QLineEdit → signal to QHelloLabel
Less code, less portions that can break, easier to test, ….
© Integrated Computer Solutions, Inc. All Rights Reserved
Porting from QNX
Note for native QNX-ers
● QNX has been, and continues to be a “Message passing” architecture:
○ Lightweight transition from one process to another
○ Designed for many thousands (millions) of messages
○ Many aspects of QNX based on message passing
○ Photon is no exception
● If porting to other operating systems:
○ Can’t rely as heavily on OS-level message passing
○ Buffered streams more common
○ QNX is a POSIX OS, therefore a port to Linux should be easier
© Integrated Computer Solutions, Inc. All Rights Reserved
Conclusion
● Most applications would have one to one mapping to Qt widgets
● Need help getting started? ICS developers:
○ Have many years of experience with Qt and QNX/Photon
○ Can assist you with the port (while your developers continue advancing
with current development)
○ Can help you get started by analyzing your application and coming up with
a plan of action
© Integrated Computer Solutions, Inc. All Rights Reserved
Questions?

More Related Content

What's hot (20)

PDF
Convert Your Legacy OpenGL Code to Modern OpenGL with Qt
ICS
 
ODP
Qt 5 - C++ and Widgets
Juha Peltomäki
 
PDF
Optimizing Performance in Qt-Based Applications
account inactive
 
PPTX
OpenGL Fixed Function to Shaders - Porting a fixed function application to “m...
ICS
 
PDF
Development with Qt for Windows CE
account inactive
 
PDF
Qt Tutorial - Part 1
rmitc
 
PDF
Creating Advanced GUIs for Low-power MCUs with Qt
ICS
 
PDF
Qt quick (qml)
Elena Kotina
 
PDF
Hildon 2.2: the Hildon toolkit for Fremantle
Alberto Garcia
 
PDF
How to Make Your Qt App Look Native
account inactive
 
ODP
Treinamento Qt básico - aula I
Marcelo Barros de Almeida
 
PDF
How to keep Eclipse on the bleeding edge in the Linux world
Arun Kumar Thondapu
 
PDF
Porting Motif Applications to Qt - Webinar
Janel Heilbrunn
 
PDF
Necessitas - Qt on Android - from FSCONS 2011
Johan Thelin
 
ODP
Cross Platform Qt
Johan Thelin
 
PPTX
Qt for beginners part 1 overview and key concepts
ICS
 
ODP
Qt Workshop
Johan Thelin
 
PDF
Driving Down Automotive Costs for Richer HMIs with Qt & i.MX RT1170
Qt
 
PDF
Update on the open source browser space (16th GENIVI AMM)
Igalia
 
Convert Your Legacy OpenGL Code to Modern OpenGL with Qt
ICS
 
Qt 5 - C++ and Widgets
Juha Peltomäki
 
Optimizing Performance in Qt-Based Applications
account inactive
 
OpenGL Fixed Function to Shaders - Porting a fixed function application to “m...
ICS
 
Development with Qt for Windows CE
account inactive
 
Qt Tutorial - Part 1
rmitc
 
Creating Advanced GUIs for Low-power MCUs with Qt
ICS
 
Qt quick (qml)
Elena Kotina
 
Hildon 2.2: the Hildon toolkit for Fremantle
Alberto Garcia
 
How to Make Your Qt App Look Native
account inactive
 
Treinamento Qt básico - aula I
Marcelo Barros de Almeida
 
How to keep Eclipse on the bleeding edge in the Linux world
Arun Kumar Thondapu
 
Porting Motif Applications to Qt - Webinar
Janel Heilbrunn
 
Necessitas - Qt on Android - from FSCONS 2011
Johan Thelin
 
Cross Platform Qt
Johan Thelin
 
Qt for beginners part 1 overview and key concepts
ICS
 
Qt Workshop
Johan Thelin
 
Driving Down Automotive Costs for Richer HMIs with Qt & i.MX RT1170
Qt
 
Update on the open source browser space (16th GENIVI AMM)
Igalia
 

Similar to Migrating from Photon to Qt (20)

PDF
Porting Motif Applications to Qt - Webinar
ICS
 
PDF
Qt for Python
ICS
 
PPT
Developing and Benchmarking Qt applications on Hawkboard with Xgxperf
Prabindh Sundareson
 
PDF
Qt for beginners part 4 doing more
ICS
 
PDF
Software Development Best Practices: Separating UI from Business Logic
ICS
 
PPTX
Green Custard Friday Talk 22: Flutter
Green Custard
 
PDF
Qt Automotive Suite - under the hood // Qt World Summit 2017
Johan Thelin
 
PDF
Exploring Python GUI Programming_ Creating User-Friendly Applications
swethag283189
 
ODP
Meet Qt
account inactive
 
DOCX
Qtframework
Aditi Shrivastava
 
PPTX
PyQt.pptx
manishgupta316325
 
PDF
Network programming with Qt (C++)
Manohar Kuse
 
PDF
So I downloaded Qt, Now What?
ICS
 
PDF
So I Downloaded Qt, Now What?
Janel Heilbrunn
 
ODP
PyQt Application Development On Maemo
achipa
 
PDF
Andreas Jakl, Qt Symbian Maemo Quickstart
NokiaAppForum
 
PPT
Qt Technical Presentation
Daniel Rocha
 
PPTX
About Python Tkinter and creating .a GUI
jdatta247
 
PDF
The Universal Developer: Deploying Modern Tcl/Tk Solutions on the Mac
Kevin Walzer
 
Porting Motif Applications to Qt - Webinar
ICS
 
Qt for Python
ICS
 
Developing and Benchmarking Qt applications on Hawkboard with Xgxperf
Prabindh Sundareson
 
Qt for beginners part 4 doing more
ICS
 
Software Development Best Practices: Separating UI from Business Logic
ICS
 
Green Custard Friday Talk 22: Flutter
Green Custard
 
Qt Automotive Suite - under the hood // Qt World Summit 2017
Johan Thelin
 
Exploring Python GUI Programming_ Creating User-Friendly Applications
swethag283189
 
Qtframework
Aditi Shrivastava
 
Network programming with Qt (C++)
Manohar Kuse
 
So I downloaded Qt, Now What?
ICS
 
So I Downloaded Qt, Now What?
Janel Heilbrunn
 
PyQt Application Development On Maemo
achipa
 
Andreas Jakl, Qt Symbian Maemo Quickstart
NokiaAppForum
 
Qt Technical Presentation
Daniel Rocha
 
About Python Tkinter and creating .a GUI
jdatta247
 
The Universal Developer: Deploying Modern Tcl/Tk Solutions on the Mac
Kevin Walzer
 
Ad

Recently uploaded (20)

PPTX
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
PDF
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
PDF
MiniTool Power Data Recovery 8.8 With Crack New Latest 2025
bashirkhan333g
 
PPTX
Tally_Basic_Operations_Presentation.pptx
AditiBansal54083
 
PDF
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
PPTX
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
PDF
vMix Pro 28.0.0.42 Download vMix Registration key Bundle
kulindacore
 
PDF
Wondershare PDFelement Pro Crack for MacOS New Version Latest 2025
bashirkhan333g
 
PDF
Technical-Careers-Roadmap-in-Software-Market.pdf
Hussein Ali
 
PDF
Download Canva Pro 2025 PC Crack Full Latest Version
bashirkhan333g
 
PPTX
Homogeneity of Variance Test Options IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
PPTX
Finding Your License Details in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PPTX
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PPTX
Customise Your Correlation Table in IBM SPSS Statistics.pptx
Version 1 Analytics
 
PPTX
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
PDF
iTop VPN With Crack Lifetime Activation Key-CODE
utfefguu
 
PDF
NEW-Viral>Wondershare Filmora 14.5.18.12900 Crack Free
sherryg1122g
 
PPTX
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
PDF
Top Agile Project Management Tools for Teams in 2025
Orangescrum
 
In From the Cold: Open Source as Part of Mainstream Software Asset Management
Shane Coughlan
 
Generic or Specific? Making sensible software design decisions
Bert Jan Schrijver
 
MiniTool Power Data Recovery 8.8 With Crack New Latest 2025
bashirkhan333g
 
Tally_Basic_Operations_Presentation.pptx
AditiBansal54083
 
SAP Firmaya İade ABAB Kodları - ABAB ile yazılmıl hazır kod örneği
Salih Küçük
 
Agentic Automation: Build & Deploy Your First UiPath Agent
klpathrudu
 
vMix Pro 28.0.0.42 Download vMix Registration key Bundle
kulindacore
 
Wondershare PDFelement Pro Crack for MacOS New Version Latest 2025
bashirkhan333g
 
Technical-Careers-Roadmap-in-Software-Market.pdf
Hussein Ali
 
Download Canva Pro 2025 PC Crack Full Latest Version
bashirkhan333g
 
Homogeneity of Variance Test Options IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
Finding Your License Details in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Customise Your Correlation Table in IBM SPSS Statistics.pptx
Version 1 Analytics
 
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
iTop VPN With Crack Lifetime Activation Key-CODE
utfefguu
 
NEW-Viral>Wondershare Filmora 14.5.18.12900 Crack Free
sherryg1122g
 
AEM User Group: India Chapter Kickoff Meeting
jennaf3
 
Top Agile Project Management Tools for Teams in 2025
Orangescrum
 
Ad

Migrating from Photon to Qt

  • 1. © Integrated Computer Solutions, Inc. All Rights Reserved Migrating from QNX Photon to Qt Bobby Chawla <[email protected]> Integrated Computer Solutions, Inc.
  • 2. © Integrated Computer Solutions, Inc. All Rights Reserved Introduction ● Working with ICS for about four years now ● Taste for real-time software development ● Used to work with Process Control Systems for industry: ○ Pulp & Paper machines ○ Lots of QNX development ● Offered to work on QNX itself ● About five years developing various parts of Photon
  • 3. © Integrated Computer Solutions, Inc. All Rights Reserved Agenda ● Introduction ● What is (was) Photon? ● What is Qt? ● Anatomy of an application ● Architecture differences ● Qt Signals and slots ● Widget comparisons ● When to port ● Porting from QNX ● Conclusion
  • 4. © Integrated Computer Solutions, Inc. All Rights Reserved What is (was) Photon? ● Photon : A name with multiple meanings: ○ Light particle ○ QNX/Photon MicroGUI ■ typically used with Neutrino ○ Photon UI project (Javascript framework to create UIs) ○ Photon OS distribution … Probably More … .
  • 5. © Integrated Computer Solutions, Inc. All Rights Reserved What is (was) Photon? ● Photon : A name with multiple meanings: ○ Light particle ○ QNX/Photon MicroGUI ■ typically used with Neutrino ○ Photon UI project (Javascript framework to create UIs) ○ Photon OS distribution We are talking about the QNX/Photon MicroGUI .
  • 6. © Integrated Computer Solutions, Inc. All Rights Reserved What is (was) Photon… cont. ● Started in the Mid-90s ● Had a Windows 95 look and feel: ○ “modern” at the time ● Evolved with more GUI options
  • 7. © Integrated Computer Solutions, Inc. All Rights Reserved What is(was) Photon… cont. ● Deprecated Could say Depreciated - Appropriate verb ● QNX v6.32 - Full implementation ● QNX v6.4 - Reduced widget set: ○ Removed browser & email applications ○ Removed PtTerminal ■ though PtTty was still there ● QNX v6.5 - Essentially the windowing system was still there: ○ But not designed to be a desktop OS ● QNX v6.6 - Unsupported: ○ But die-hards could import the 6.5 executables ● QNX v7 - Unavailable - Now it’s deprecated
  • 8. © Integrated Computer Solutions, Inc. All Rights Reserved What is Qt? ● Cross-platform application framework ● Supports all major desktop, mobile, embedded platforms ○ Windows, Mac OS, Linux, iOS, Android, QNX, etc. ● Written in C++ ● Not just for GUI, but includes portable abstraction for most OS features ○ File i/o, strings, containers, networking, etc. ● Around since 1991 ● Used by approximately 1 million developers in over 70 industries ● Owned by The Qt Company ● Available under GPL/LGPL and commercial licenses
  • 9. © Integrated Computer Solutions, Inc. All Rights Reserved What is Qt? - Qt Widgets ● Traditional building blocks for GUI applications in Qt: ○ e.g. QButton, QLabel, QTextEdit ● Can use Qt Designer - a GUI builder for designing dialogs and screens ● Have native look on each platform ● Originally designed for desktop applications, but also usable on mobile and embedded.
  • 10. © Integrated Computer Solutions, Inc. All Rights Reserved What is Qt? - QML (aka Qt Quick) ● Simple JSON-like declarative language ● Provides basic elements to build up user interfaces ● Elements support properties, signals, methods ● Makes it easy to define animated, fluid, touchscreen interfaces ● Qt Quick Controls provide widget-like UI elements ● Backed by full JavaScript engine ● Qt Creator IDE has a QML Designer ○ developers typically write code by hand (QML Designer getting better) ● Mostly targeted at mobile and embedded ○ but also supported on desktop platforms
  • 11. © Integrated Computer Solutions, Inc. All Rights Reserved What is Qt? - Qt on QNX ● Qt has been available as an option for QNX development since 2010 ● Qt widgets provide similar classes and mechanisms to Photon’s ● Typically find source code to Qt, configure for QNX, and compile ● Given the current customer base of QNX-7 - QNX is encouraging QML: ○ Partially configured for QML already in Momentics ○ Since this presentation is about porting from Photon, ■ we will focus on Qt widgets
  • 12. © Integrated Computer Solutions, Inc. All Rights Reserved Anatomy of an Application ● At a high level, both Photon & Qt GUI applications are: ○ Event driven ○ Similar parent/child relationships ■ parent window ■ every widget has a parent which helps keep things organized ● e.g. when the parent gets deleted, the child cleans up as well ■ dialogs - children of parent’s windows ○ Interactions ■ Photon uses callbacks vs. Qt using “signals and slots” ○ Qt separates widgets from layout managers
  • 13. © Integrated Computer Solutions, Inc. All Rights Reserved Architecture Differences ● Photon (conceptually) is an entire graphical system: ○ Though not as well documented, just as easy to create an app that captures Photon events, thus being able to create your own: ■ graphics driver ■ mouse controller ■ screen capture app ■ virtual keyboard ■ other IO device
  • 14. © Integrated Computer Solutions, Inc. All Rights Reserved Architecture Differences… cont. ● Those of you familiar with Photon will know about: ○ Pg….() functions - Raw graphics functions ○ Ph….() functions - Open Photon channels, create regions, collect/emit events ○ Pt….() functions - Create, Manipulate & Destroy widgets ● Qt: ○ Qt widget classes map mostly to Pt….() functions ○ Mature ecosystem of other classes for portability & convenience ■ e.g. stacks, accessing filesystem, strings
  • 15. © Integrated Computer Solutions, Inc. All Rights Reserved Architecture Differences… cont. ● Typically Qt is run in a third-party’s windowing environment: ○ Qt has backends for different graphics rendering environments ■ X11/xcb, OpenGL/ES, Linux frame buffer, etc. ■ look & feel designed to look native on the device ● same application looks/behaves slightly differently on a Mac than on Linux or Windows ○ If working with a specialized board ■ need to speak with the hardware (BSP) vendor to interface with new devices
  • 16. © Integrated Computer Solutions, Inc. All Rights Reserved Architecture Differences… cont. Application development: PhAB , Qt Designer (GUI builder) & Qt Creator (IDE).
  • 17. © Integrated Computer Solutions, Inc. All Rights Reserved Architecture Differences… cont. ● Photon uses “PhAB”, ● Can compile/link in PhAB ● PhAB - not your average application builder: ○ No source code created for PhAB windows/dialog ○ GUI component info written as binary data as part of the executable
  • 18. © Integrated Computer Solutions, Inc. All Rights Reserved Architecture Differences… cont. ● Qt Creator (and Designer) is not your average application builder either: ○ Full development suite ○ Architecture-safe classes ○ PhAB/Photon users will appreciate how easily tasks get done (e.g. menus)
  • 19. © Integrated Computer Solutions, Inc. All Rights Reserved Architecture Differences… menus
  • 20. © Integrated Computer Solutions, Inc. All Rights Reserved Qt Signals & Slots ● Another term that can have different meanings: “Signals”: ○ QNX developers associate “Signals” as an operating system message ■ Signal can be passed from one process to another ■ Interrupts the receiving process, and process the signal ■ The call does not block the calling process ● Qt “Signals” are not the same as Linux/POSIX signals above: ○ Qt Signals & Slots are a one-to-many messaging system that lets Qt “Objects” communicate within a process ○ Could be blocking function call, or could be queued ○ No “return” values from a signal ● Which differ from Boost Signals/Slots - allow return values from the “slots”
  • 21. © Integrated Computer Solutions, Inc. All Rights Reserved Qt Signals & Slots… cont. ● Qt signals are an expanded form of callbacks that allow separation of UI elements from business logic ● Signals are emitted by Qt objects when event occurs (e.g. button pressed) ● Slots are methods that can be called in response to a signal ● Typically connect signals and slots at run-time ● Qt uses “moc” tool to generate meta object information about signals/slots ● Type safe alternative to callbacks, checked at compile time or run time
  • 22. © Integrated Computer Solutions, Inc. All Rights Reserved Widget Comparison - Menus and Options Functionality Photon Qt Major Differences Horizontal Menubar PtMenuBar QMenuBar QMenuBar has several insert Item methods. Pulldown Popup Menu PtMenu QMenu Qt provides a cleaner abstraction using QMenu. The common object for pulldowns popups, and menubars Menu button PtMenuButton QMenu Combo Box PtComboBox QComboBox Toggle or Multiple-selection options PtToggleButton (Pt_TOGGLE_RADIO) QRadioButton or QCheckBox
  • 23. © Integrated Computer Solutions, Inc. All Rights Reserved Widget Comparison - Dialogs Functionality Photon Qt Error PtAlert() QErrorMessage Information PtNotice() QMessageBox Question PtAlert() QMessageBox Warning PtAlert() QMessageBox Progress PtProgress widget QProgressDialog Simple Input PtPrompt() QInputDialog File Chooser PtFileSelection() QFileDialog HTML/Web display PtWebClient widget QWebView Generic/Custom PtWindow container QDialog ● Italicized Photon items (such as PtAlert()) are convenience functions which use widgets to build a dialog
  • 24. © Integrated Computer Solutions, Inc. All Rights Reserved Widget Comparison… cont. ● Examples of widgets that are not 1 to 1 relationships: ○ PtTimer ○ RtTrend ● Qt has a large user base with many contributors: ○ Many sophisticated Qt widgets that don't exist in Photon are available from 3rd party vendors
  • 25. © Integrated Computer Solutions, Inc. All Rights Reserved Widget Comparison - Containers vs. Layouts ● PtContainer (or it’s subclasses) allow the automatic placement of widgets in a: ○ FILL_LAYOUT (Horizontal / Vertical) ○ ROW_LAYOUT (Horizontal/Vertical with options for Justify, Wrap and Pack) ○ GRID_LAYOUT ○ ANCHOR_LAYOUT ● In Qt, layouts are more sophisticated: ○ Layouts are separated from any widget subclassed off of QWidget ○ Container widgets can manage their children using QWidget::setLayout()
  • 26. © Integrated Computer Solutions, Inc. All Rights Reserved When to Port / When to Consider Rewrite ● Photon is deprecated / newer hardware not supported ○ Eventually will run out of hardware options ○ Or user expectations for a device increase ● What code can you typically keep and what do you need to rewrite? ● Design aspects that makes it easier to port, e. g. ○ Good separation of UI and business logic. ○ Much of your application can be dissected into Model-View-Controller (MVC) portions
  • 27. © Integrated Computer Solutions, Inc. All Rights Reserved Object Oriented Design 101 ● Qt is based off C++: ○ Photon apps are usually ‘C’ based ○ Need to port some or all of your code to C++. ○ Your team may need to learn object-oriented design. ○ May require re-architecting (e.g. to separate GUI from business logic). ● C++ applications typically better at compartmentalizing, ○ Scale better for larger projects
  • 28. © Integrated Computer Solutions, Inc. All Rights Reserved Object Oriented Design “101”
  • 29. © Integrated Computer Solutions, Inc. All Rights Reserved Object Oriented Design 101… cont. ● Created the same application in Photon & Qt ● In Photon had a functional relation PtText → callback → PtSetArg( PtLabel ) ● Can do a similar connection with Qt: ○ QLineEdit → signal to QObject::AddHello → signal to QLabel ● However, a cleaner implementation is to create a ‘Hello’ widget: ○ Create a QHelloLabel as a subclass of QLabel, ○ QHelloLabel displays the string with ‘Hello’ prepended ○ QLineEdit → signal to QHelloLabel Less code, less portions that can break, easier to test, ….
  • 30. © Integrated Computer Solutions, Inc. All Rights Reserved Porting from QNX Note for native QNX-ers ● QNX has been, and continues to be a “Message passing” architecture: ○ Lightweight transition from one process to another ○ Designed for many thousands (millions) of messages ○ Many aspects of QNX based on message passing ○ Photon is no exception ● If porting to other operating systems: ○ Can’t rely as heavily on OS-level message passing ○ Buffered streams more common ○ QNX is a POSIX OS, therefore a port to Linux should be easier
  • 31. © Integrated Computer Solutions, Inc. All Rights Reserved Conclusion ● Most applications would have one to one mapping to Qt widgets ● Need help getting started? ICS developers: ○ Have many years of experience with Qt and QNX/Photon ○ Can assist you with the port (while your developers continue advancing with current development) ○ Can help you get started by analyzing your application and coming up with a plan of action
  • 32. © Integrated Computer Solutions, Inc. All Rights Reserved Questions?