32
© Integrated Computer Solutions, Inc. All Rights Reserved Migrating from QNX Photon to Qt Bobby Chawla <[email protected]> Integrated Computer Solutions, Inc.

Migrating from Photon to Qt

  • Upload
    ics

  • View
    352

  • Download
    2

Embed Size (px)

Citation preview

Page 1: Migrating from Photon to Qt

© Integrated Computer Solutions, Inc. All Rights Reserved

Migrating fromQNX Photon to Qt

Bobby Chawla <[email protected]>Integrated Computer Solutions, Inc.

Page 2: Migrating from Photon to Qt

© 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

Page 3: Migrating from Photon to Qt

© 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

Page 4: Migrating from Photon to Qt

© 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 … .

Page 5: Migrating from Photon to Qt

© 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 .

Page 6: Migrating from Photon to Qt

© 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

Page 7: Migrating from Photon to Qt

© 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

Page 8: Migrating from Photon to Qt

© 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

Page 9: Migrating from Photon to Qt

© 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.

Page 10: Migrating from Photon to Qt

© 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

Page 11: Migrating from Photon to Qt

© 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

Page 12: Migrating from Photon to Qt

© 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

Page 13: Migrating from Photon to Qt

© 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

Page 14: Migrating from Photon to Qt

© 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

Page 15: Migrating from Photon to Qt

© 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

Page 16: Migrating from Photon to Qt

© Integrated Computer Solutions, Inc. All Rights Reserved

Architecture Differences… cont.

Application development: PhAB , Qt Designer (GUI builder) & Qt Creator (IDE).

Page 17: Migrating from Photon to Qt

© 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

Page 18: Migrating from Photon to Qt

© 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)

Page 19: Migrating from Photon to Qt

© Integrated Computer Solutions, Inc. All Rights Reserved

Architecture Differences… menus

Page 20: Migrating from Photon to Qt

© 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”

Page 21: Migrating from Photon to Qt

© 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

Page 22: Migrating from Photon to Qt

© 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

Page 23: Migrating from Photon to Qt

© 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

Page 24: Migrating from Photon to Qt

© 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

Page 25: Migrating from Photon to Qt

© 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()

Page 26: Migrating from Photon to Qt

© 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

Page 27: Migrating from Photon to Qt

© 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

Page 28: Migrating from Photon to Qt

© Integrated Computer Solutions, Inc. All Rights Reserved

Object Oriented Design “101”

Page 29: Migrating from Photon to Qt

© 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, ….

Page 30: Migrating from Photon to Qt

© 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

Page 31: Migrating from Photon to Qt

© 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

Page 32: Migrating from Photon to Qt

© Integrated Computer Solutions, Inc. All Rights Reserved

Questions?