The second of two videos where KDAB's CEO Kalle Dalheimer discusses the pros and cons of the Cyber Resilience Act (CRA), whose main goal is to improve cybersecurity in the EU by establishing strict standards for digital products and software.
In a recent email, KDABian Leon Matthes highlighted some of his go-to command line tools for everyday use on Unix. His recommendations sparked a lively exchange among our colleagues, each sharing their own favorite utilities. Many of these tools offer efficient alternatives to standard Unix programs, speeding up the workflow or otherwise enriching the development […]
CXX-Qt is KDAB's extension to CXX, which adds Qt features like properties, signals and slots to CXX. In this step-by-step tutorial, we implement a QAbstractItemModel subclass, which is key to exposing structured data to QML.
The main goal of the Cyber Resilience Act (CRA) is to improve cybersecurity in the EU by establishing strict standards for digital products and software. It primarily aims to prevent cyber threats that could endanger essential infrastructure, businesses, and the digital economy. In this video Matthias Kalle Dalheimer, President and CEO of KDAB, shares his view on the CRA and its effect on open source software. This is Part 1 of two videos on the subject.
CXX-Qt is KDAB's extension to CXX, which adds Qt features like properties, signals and slots to CXX. In this step-by-step tutorial, we extend our "Hello World!" application from the last video with a very basic Qt GUI.
To build parts of the code optionally, or to inject CMake variables into C++, you need pre-processor definitions like -DENABLE_FEATURE on the command-line or #define ENABLE_FEATURE 1 in code. This video shows 3 different ways of setting such pre-processor definitions with CMake. In addition, the video explains how and why you should use #if rather than #ifdef for on/off defines.
The goal When building C++ code with CMake, it is very common to want to set some pre-processor defines in the CMake code. For instance, we might want to set the project's version number in a single place, in CMake code like this: This sets the CMake variable PROJECT_VERSION to 1.5, which we can then […]
CXX is an opinionated library that allows mixing C++ and Rust in a safe and idiomatic way. In this step-by-step tutorial, we implement an example application that uses CXX to bridge between C++ and Rust. In the following videos, we will expand on this knowledge to add Qt to the mix with CXX-Qt.
Shipping your product to customers is where some real challenges in software development begin. Once it lands in customers’ hands, delivering the expected and necessary software updates can be a complicated task. Here’s a breakdown of some key considerations to keep your product, and your customers, running smoothly, even after your product has shipped. Getting […]
In the last months, governments around the world have put a focus on memory safe programming languages. For C++ projects, Rust has often been suggested as the natural choice to port to.
Early-Bird tickets are on sale for the KDAB Training Day 2025 until 2025-03-31 23:59 The KDAB Training Day 2025 will take place in Munich on May 8th, right after the Qt World Summit on May 6th-7th. Choose to buy a combo ticket here (for access to QtWS and Training Day) or here (for access to […]
We just released CXX-Qt version 0.7! CXX-Qt is a set of Rust crates for creating bidirectional Rust ⇄ C++ bindings with Qt. It supports integrating Rust into C++ applications using CMake or building Rust applications with Cargo. CXX-Qt provides tools for implementing QObject subclasses in Rust that can be used from C++, QML, and JavaScript. […]
KDAB is an exhibitor at the Embedded Software Engineering Kongress (ESE) held in Sindelfingen (Germany) from December 2nd to 5th. Registration is already open! "The ESE Congress is Germany's leading congress for the embedded software industry. Every year in December, over 1,200 professionals meet to learn about current technologies and methods, discuss trends and set […]
When you press Ctrl+k and type a class name, you are asked which version of Qt you want to see that documentation for. 99% of the time, the answer is likely "The latest". You can actually make it show the latest by default, but it is well hidden.
One of the standard communication protocols for web services is SOAP, which is basically XML over HTTP. I wrote an opensource library called KDSoap which makes it easy to do SOAP with Qt (both client-side and server-side). In this video you will see how, starting from a web service which provides a WSDL file to describe its API, KDSoap can generate code to make synchronous or asynchronous calls to the web service.
In recent years, a lot has been happening to improve performance, maintainability and tooling of QML. Some of those improvements can only take full effect when your code follows modern best practices. Here are 10 things you can do in order to modernize your QML code and take full advantage of QML's capabilities. 1. Use […]
A very common communication protocol is REST, which is simply JSON over HTTP. Qt has all the building blocks for this, with QJsonDocument for JSON and QNetworkAccessManager for HTTP. In this video, you will see a real-world library that makes REST requests to a web service called TMDB (movie database), as an example.
Not all devices require screens. Some rely on web-based user interfaces or smartphone apps for control and interaction. But if your product needs a built-in screen and you need to decide which to get and what to do with it, the rest of this blog is for you. Elaborate or plain? It’s important to choose […]
This video shows an alternative way to a DBus client using Qt, using the convenience of blocking calls but without blocking the GUI thread: all blocking calls are done in a separate thread.
This video shows how to implement a DBus client using Qt, using generated code so that calls and their signature are checked at compile time. Special care is taken not to block the GUI thread, using asynchronous handling only (via signals and slots, and a queue of pending requests)