Einleitung Der ESE Kongress ist die Leitveranstaltung für Embedded Software Engineering in Deutschland. In diesem Jahr fand er erstmals digital statt, so dass die Teilnahme auch per Video möglich war. An fünf Tagen gab es 3 Keynotes und 96 Fachvorträge aus allen Bereichen der Embedded Softwareentwicklung. Anton Kreuzkamp von KDAB sprach über maßgeschneidertes Code-Refactoring mit […]
In this video, we discuss the basics of model/view programming with Qt/QML. How do we expose a set of data (a list, a table, etc.) from the business logic to C++? How much flexibility do we have before the data actually reaches QML?
Another day, another blog about some of KDAB's utility classes. Now it's the turn of KDSingleApplication, a class that helps implement applications that follow the single-instance policy. What is a single-instance policy? Single-instance policy refers to those applications that want to spawn a unique instance for a given user session. Even when launched multiple times, […]
In this module we'll use the knowledge that we gained in module 7, QObject, signals, slots, properties, variants, in order to make C++ and QML talk to each other. In this first video, we are going to show how we can export objects of value classes (numbers, strings, etc.) from C++ to QML.
This video shows how to export QObject subclasses to QML. While similar to the previous video, QObjects aren't value classes and add features like properties, signals, and slots via the meta-object system. We get all these features when exporting QObjects to QML!
When QObjects in C++ are exposed to QML, who manages their lifetime? Can QML's garbage collector reclaim them if they're still needed in C++? What happens if C++ doesn't delete them, expecting QML to handle it? This video explores object ownership between C++ and QML.
This video discusses how to create GUI elements in C++, and make them available to QML. It's just as simple as creating non-GUI elements, with a very small twist.
Previous videos showed exporting individual C++ objects to QML. This video covers something related but different: exposing C++ classes to QML so QML can create instances. We'll start with non-GUI classes; the next video will cover GUI classes.
CMake 3.19 was officially released a couple of months ago, and one of the biggest – and most exciting – new features is the addition of presets. What are presets, you might ask, and why should we be excited about them? Presets are a bunch of pre-set CMake options that enable developers to ensure that […]
As was previously discussed, since the 6.0.0 release of Qt, Qt 3D no longer ships as a pre-compiled module. If you need to use it on your projects, try out the new features, or just see your existing application is ready for the next chapter of Qt's life, you need to compile Qt 3D from […]
You know the drill: in C++ you need to #include header files that declare the types and functions from the libraries that you use. Qt is no exception in this regard. Qt follows a very nice convention for its own datatypes: if you need to use a type called QType, then use #include <QType>. This […]
We just released KD Soap 1.10.0! What is KD Soap? KD Soap is a tool for creating client applications for web services. With KD Soap, it's possible to create web services that don't require further components. This tool makes it possible to interact with applications that have APIs that can be exported as SOAP objects. […]
QVariant is a cornerstone Qt class used in the property system, model/view, and C++/QML data exchange. It's a type-erased container similar to std::any, storing objects of almost any type while remembering the stored type. This video demonstrates how QVariant works in practice.
"unresolved external symbol 'public: virtual struct QMetaObject ...'" - a mysterious linker error that sometimes occurs when working with QObjects and signals/slots. This video explains what causes it, how to solve it with just one click, and what happens behind the scenes where the build system meets signals and slots.
QObject implements a huge number of features: properties, events, signals and slots, automatic memory management and much more. In this module we are going to explore how they work and how they map to all the QML knowledge that we have built so far.
"When the user clicks this button, run this code" is one of programming's oldest problems. Qt's solution is the signals and slots mechanism: buttons emit signals when clicked, slots contain the code to run, and connections link them together. This video explains creating such connections in C++.
Did you know that you can connect a QObject signal to a lambda function, or to any free function or function object, for what it's worth? It's extremely convenient, but it comes with its own set of "gotchas" that we must understand. In this video we'll explain the syntax and reason behind the good use cases of connecting to a lambda function instead of connecting to a "regular" slot.
In the previous videos of this module we have learned how signals and slots work. We have also learned how to connect an existing signal to an existing slot (in all its variations). In this episode, we will build up on that knowledge and discuss how to declare and implement custom signals and slots – and why we would want to do that!
This is the third and last installment of our series about full stack tracing. If you haven’t read them yet, you’ll probably want to check out the introduction and tool setup portions first. In this blog, we’re going to focus on visualizing and interpreting full stack traces. At this point, we’re going to assume that […]
Some time ago, I wrote about how to build C++ projects with ASAN on Windows. Now, if you happen to deal with Qt projects you may want to take this one step further and sanitize Qt itself. Why bother with a sanitized Qt build? Let's have a closer look on why having a sanitized Qt […]