© Integrated Computer Solutions, Inc. All Rights Reserved
Migrating fromQNX Photon to Qt
Bobby Chawla <[email protected]>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 - DialogsFunctionality Photon QtError 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 QNXNote 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?