If you’ve been following our blog, you’re likely aware of Rust’s growing presence in embedded systems. While Rust excels in safety-by-design, it’s also common to find it integrated with C++. This strategic approach leverages the strengths of both languages, including extensive C++ capabilities honed over the years in complex embedded systems. Let’s delve into some […]
You've reached the third and final entry of the Instantiating arbitrary Qt Quick components with JSON series. Part 1 and Part 2 can be found at their respective links. The first part focuses on the software design pattern used to dynamically instantiate components. The second one shows how to layout these dynamic components by incorporating […]
The class QMainWindow provides all the parts needed to create a main window for your application, namely toolbars, docking widgets, a menu bar, and menus. In this episode, we will look at how they all fit together.
We’ve explained some of the architectural elements of building your own firmware over-the-air (OTA) soution for IoT and embedded systems in a previous blog. But what about the hardware requirements? Or processes? Let’s explore issues that are essential to solve for a robust OTA solution. Maximizing flash longevity Modern devices rely on solid-state drives, which […]
Qt provides built-in dialogs for common use cases including file selection, color/font choosers, simple text input (like asking for names), message display, and progress indication. It also includes a framework for implementing wizards. This episode covers all these dialog types and demonstrates their practical usage in Qt applications.
In Qt, you can create a top level window, simply by providing nullptr as the parent. However, we still have a class called QDialog specifically for creating dialogs. Among other things it offers to wait for the dialog to be completed before your code continues execution.
Qt Test is a framework designed for unit testing applications and libraries built with Qt. It provides all the standard features commonly found in unit testing frameworks, making it easier to write unit tests for Qt-based projects. We're happy to introduce the QtTest Runner - a Visual Studio Code extension for running Qt Tests via […]
For agile projects, changes are a daily business, and parts of the project are often defined during the development process. But how to find out how much your project has changed and how to handle this, so you don't miss deadlines?
Since we first announced it last year, our Vulkan wrapper KDGpu has been busy evolving to meet customer needs and our own. Our last post announced the public release of v0.1.0, and version 0.5.0 is available today. It's never been easier to interact with modern graphics technologies, enabling you to focus on the big picture […]
In this second episode on layout managers, we will discuss how to make widgets stretch, and how to get spaces into your layout.
We will discuss that both when you code it in C++, and when you do it in Qt Designer.
KDDockWidgets has launched its latest version 2.1. This release comes packed with over 500 commits, offering enhanced stability over its predecessor, version 2.0, without introducing any breaking changes. KDDockWidgets is a versatile framework for custom-tailored docking systems in Qt written by KDAB’s Sérgio Martins. For more information about its rich set of features, have a […]
In the last post of this series we learned that: erasing elements from the middle of a vector can be implemented, in general, via a series of move assignments, move constructions, swaps, destructions for types with value semantics, the exact strategy does not really matter for types with write-through reference semantics, the strategy matters, because […]
Have you ever wondered what the difference is between QWidget::repaint() and QWidget::update()? You may even have heard that update events collapsed into just one event in the event loop, which might make you ask the question on whether there are other events merged together. Let's debug into the Qt source code to get an answer.
In the last post of this series we started exploring how to erase an element from the middle of a vector. We discussed that in principle there are several different possible ways to implement erase().For instance, a vector could move-assign over the elements to be erased: Alternatively, a vector could use rotations or some other […]
I was tasked to come up with a simple architecture for remote real time instantiation of arbitrary QML components. I’ve split my findings into 3 blog entries, each one covering a slightly different topic. Part 1 focuses on the software design pattern used to dynamically instantiate components. Part 2 shows how to layout these dynamic […]
The task was simple: Add double click to a push button - with the added bonus of it not emitting the normal clicked if there is a double click. OK, this sounds trivial, right? Well no, it wasn't entirely. To get it right you have to understand quite a bit of both signals/slots and the event system. This episode explains.
LUMA Vision is developing cutting-edge 4D digital imaging (i.e. real time 3D rendering) and navigation to enhance cardiologists' and electrophysiologists' visibility into the heart during intracardiac procedures. With KDAB's support, they are creating it by using Qt to tap into top-notch graphics technology. Watch the video to learn more.
In the last post of this series we discussed the usage of trivial relocation in order to optimize move construction followed by the destruction of the source. To quickly recap: objects of certain datatypes ("trivially relocatable" types) can be moved in memory by simply moving bytes; this can be used to optimize certain bulk operations […]
In this last episode on "Show me your IDE", we now look at visual studio code.
The container classes introduced in Qt 4 (Tulip, for the aficionados) had an interesting optimization: the ability to turn certain operations on the contained objects into byte-level manipulations. Example: vector reallocation Consider the reallocation of a QVector<T>: when the vector is full and we want to insert a new value (of type T), the vector […]