Mais conteúdo relacionado Semelhante a Migrating from Photon to Qt (20) Migrating from Photon to Qt1. © Integrated Computer Solutions, Inc. All Rights Reserved
Migrating from
QNX Photon to Qt
Bobby Chawla <bchawla@ics.com>
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)
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
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