Qt C++ Application Development on Torizon Using Visual Studio Code
Introduction
The Visual Studio Code Extension for Torizon can be used to build, debug and deploy C and C++ applications.
This, of course, includes also applications using the Qt libraries. On the other side, Qt provides not just C++ libraries but also a rich set of tools to design user interfaces using widgets or QML language and specific build tools, as qmake, that use an ad-hoc project format.
To orchestrate those tools, Qt provides a fully integrated IDE named QtCreator and, at the moment, it is not fully integrated with Torizon. To overcome that we make it easier for you to use Visual Studio Code to work on the code and leverage Qt's design tools to design user interfaces. See a comparison below between development on Torizon and other platforms as Boot to Qt and Yocto:
Design Workflow | Development Workflow | |
---|---|---|
Torizon | Qt Design Studio ✔ Enhanced UI design | Visual Studio Code ✔ Write Code ✔ Build and debug ✘ UI design |
Boot to Qt / Yocto | Qt Design Studio ✔ Enhanced UI design | Qt Creator ✔ Write Code ✔ Build and debug ✔ UI design |
Be aware that you can use Qt IDEs (Qt Design Studio and Qt Creator) together with VS Code.
If you are looking to using Python with Qt, refer to the article How to build a GUI with Qt for Python and TorizonCore.
This article complies with the Typographic Conventions for Torizon Documentation.
Prerequisites
- Read the article Visual Studio Code Extension for Torizon and install the extension.
- Install Qt Design Studio on your PC.
- When using the Qt Maintenance Tool or installing development tools from the Qt website, it's possible to select the "Qt Design Studio" component. This installs components for both the widgets-base UI files and the QtQuick/QML ones.
- Install the Remote Containers extension.
- (optional) Go through the article How to do C/C++ Development on Torizon.
- (optional) Read Qt Debian Container for Torizon to learn more about the Qt containers offered by Toradex. You don't need to focus on the practical instructions, they are abstracted by the Visual Studio Code Extension for Torizon.
Create a New Qt5 Project
The video below illustrates the process of creating and deploying to a module a Qt project using the Visual Studio Code Extension for Torizon.
To create a new project you should:
- Press
F1
to open the command bar - Select
Torizon C/C++: Create C/C++ application
- Set the name of your new application and choose the folder where it will be created
Choose one of the Qt-based templates, three templates are provided:
- Qt Core Sample: for console applications not using any UI or generating UI elements from code
- Qt Widgets Sample: for graphical applications that use QtWidgets
- Qt QML Sample: for applications using QtQuick/QML-based UI
Import an Existing Qt5 Project
There is a generic article on How to Import a C/C++ Application to Torizon, and in addition to the tips below, it is highly recommended that you read it.
To import an existing project you will have to:
- Press F1 to open the command bar
- Select Torizon C/C++: Import existing application"
- Navigate to the folder where the ".pro" file is stored
- Select the right template, depending on the kind of UI implemented by the application
You can also read the blog post from May, 2021 Importing a Qt Project Into Torizon Using VS Code.
Considerations When Migrating Your Project to Torizon
Existing projects may need to be modified to work on Torizon. Some points you need to consider:
- The extension works on a single folder, if you have multiple ".pro" files you should group them together and use a project with SUBDIRS on the top level to build them in the right order.
- After the build, binaries and data files should be deployed to a folder that is synchronized with the target, this can be done by adding: DESTDIR = $$(QMAKE_DESTIDIR) directive to the project file.
- Torizon UI implementation is based on Wayland. Qt does a very good job wrapping platform-specific aspects, but you may experience some differences in the aspect of some UI elements or the way they are rendered on screen in terms of speed or other effects.
Edit QML Files on Qt Design Studio
To open a QML file you can right-click on the file in the explorer bar or on the file itself when it is open in the VS Code editor, and select Open QML file in Qt Design Studio
.
This will start an instance of Qt Design Studio ready to edit your file.
Learn more about how to use Qt Design Studio in the official documentation.
Edit UI Files on Qt Design Studio
To open a UI file you can right-click on the file in the explorer bar or on the file itself when it is open in the VS Code editor, and select Open UI file in QtDesigner
.
This will start an instance of QtDesigner ready to edit your file.
User interface definition files are processed during build time. This processing generates header files that can then be used to reference the UI elements.
When you finish editing your UI file, you must run the build command - Ctrl + Shift + B
in Visual Studio Code - to ensure that changes you made in the user interface layout are reflected in the generated header files.
Learn more about how to use Qt Design Studio in the official documentation.
Qt Integration "Under the Hood"
Qt integration uses Qt5 packages provided by Debian and licensed using the Qt open source license.
Version of the Qt Framework
As the Debian Containers for Torizon are based on Debian, the Qt version used in our containers will be the same version provided by Debian at a given point in time.
Search for Qt packages in the Debian Packages search to get the exact version.
How to Add Qt Packages to a Project
The provided templates include only a minimal subset of Qt feature's, those features have been split by Debian into multiple packages, to reduce the overall footprint of Qt and allow users to install only the features they actually need.
If a component required by your application is not found at build time or at runtime you can check packages built from Qt source code and add them to devpackages
(build time) or extrapackages
(runtime) configuration parameters.
- Qt base packages
- Qt 3d
- Qt charts
- Qt connectivity (bluetooth/NFC)
- Qt declarative (QtQuick/QML)
- Qt graphical effects (for QML)
- Qt image formats (TGA, TIFF, and others)
- Qt location
- Qt multimedia (Widgets and QML)
- QtQuick controls
- QtQuick controls 2
- Qt script
- Qt sensors
- Qt serial port
- Qt speech
- Qt SVG support
- Qt virtual keyboard
- Qt web engine
- Qt web kit
- Qt web channel
- Qt web view
- Qt web sockets
- Qt XML patterns
Notice that for many of the components you have:
- A runtime component (usually named libqt5*) that must be added to
extrapackages
- A development component (named in the same way with "-dev" suffix)that must be added to
devpackages
since it provides headers and libraries used at build time.
Webinars and Videos
This section has on-demand webinars and videos to help you through development.