In 2019, I optimized QStringList::removeDuplicates() by using std::pmp::unordered_set with a std::pmr::monotonic_buffer_resource, when available. The class that I wrote to encapsulate this optimization has since been re-implemented three times. The latest iteration has recently landed in KDToolBox. If you have code that looks a bit like this: then you should read on. Before my change, the […]
The KDE Community has been developing a variety of Free Software products using Qt for 25 years now. Among them, the Plasma Desktop Environment, creativity tools like Krita and Kdenlive, educational applications like GCompris, groupware suites like Kontact and countless other applications, utilities, and widgets. Qt is famous for its rich set of high-quality, cross-platform […]
Version 2.0.0 of KD Reports has just been released! KD Reports creates all kinds of reports from within Qt applications. These reports are printable and exportable from code and XML descriptions. KD Reports is a developer tool used in source code, but it allows the use of templates that are created by design staff. Reports […]
As described in our previous blog posts, you can use Visual Studio Code as an IDE for C++ projects. It works particularly well with CMake-based projects. Unfortunately, with build systems not supported natively by VS Code, you need to manually configure include paths and compilation definitions, for the code model to work properly. Since the […]
KDDockWidgets 1.4.0 has been released! KDDockWidgets is a framework for custom-tailored docking systems in Qt. This is a major release with new features and lots of fixes. KDDockWidgets 1.4.0 Overview The big highlights of KDDockWidgets 1.4.0 are the experimental MDI support and the new declarative API for QtQuick: By using MainWindowMDI, you can now have […]
Some time ago, I noticed that a unit test was quite slow, using 100% CPU for a number of seconds at one point in the test. I used perf and KDAB's Hotspot to record and examine where the CPU cycles were spent in that unit test, and I quickly noticed that a lot of time […]
KD Chart 2.8.0 has been released! KD Chart is a comprehensive business charting package with many different chart types and a large number of customization options. We are constantly improving the package, and have been doing so for years. KD Chart 2.8.0 is a very minor release. The most notable change is the removal of […]
KDSoap 2.0.0 was just released! What is KDSoap? KDSoap is a tool for creating client applications for web services, without the need for any further component such as a dedicated web server. This tool makes it possible to interact with applications which have APIs that can be exported as SOAP objects. The web service then […]
After many struggles with using git LFS on repositories that need to store big files, I decided to spend some time on checking the status of the built-in partial clone functionality that could possibly let you achieve the same (as of git 2.30). TL;DR: The building blocks are there, but server-side support is spotty and […]
Heaptrack is a fast Linux heap memory profiler that tracks all runtime heap allocations. Its GUI tool analyzes recorded data to find code optimization opportunities. This video demonstrates Heaptrack in action across 32/64-bit x86 and ARM platforms, successfully used on both embedded projects and desktop applications wherever Linux runs.
Programs crash. So far, so well-known. But how can we learn from our mistakes and use the errors to learn and improve? In this talk, a short overview of what is still possible when an application crashes is given. The talk is custom-tailored for embedded devices. Traditional signal handlers, dumps and debugging is explained, and it reveals how to use a combination of Yocto, Google Breakpad, and Sentry to produce, enhance, and collect crash information to our needs.
In the previous blog post of this series, we discussed KDToolBox::QtHasher, a helper class that allows us to use unordered associative containers datatypes which have a qHash() overload but not a std::hash specialization. The majority of Qt value classes indeed are lacking such a specialization, even if they do provide a qHash() overload. For our […]
This talk presents a proven approach for creating fully automated, robust, and maintainable GUI tests for Qt applications on embedded devices. Using an ARM iMX6 device with Qt-based GUI, it demonstrates Squish GUI Tester tool usage and shows how Remote Control and Remote System functionalities enable interaction with target devices in different physical locations.
Note: This is the English translation of the article first published in German Intro The ESE Congress is one of the lead events for Embedded Software Engineering in Germany. This year it was held digitally for the first time, so that participation was also possible via video. Over five days, there were 3 keynotes and […]
This 2021 News from KDAB includes an interview with Harri Porten, CEO, on froglogic’s acquisition by The Qt Company; Qt Embedded Days; Tool of the month: spdlog; Event notices and Resources.
For many developers, QNX is the operating system of choice, when it comes to developing on embedded systems. However, the performance limits are exceeded quickly, especially if you're working on low-end hardware. As a result, you'll likely need to perform an investigation to find the bottlenecks that contribute to reaching these limits, in order to […]
Sometimes it's useful to establish a connection between a signal and a slot that should be activated only once. This is not how signal/slot connections normally behave. Remember that, when a connection is established, it will stay active until: the connection is explicitly disconnected; or the sender object is destroyed; or the receiver object is […]
Another day, another blog post about KDToolBox, KDAB's collection of miscellaneous useful C++ classes and stuff. Today, we'll talk about ways to throttle your signal/slots connections -- in other words, how to activate a slot less often than the emission rate of the signal it's connected to. The usual reason why you may want something […]
In this edition: Interview with Till Adam examining Flutter 2.0 as an alternative to Qt, Qt Embedded Days speaker and topic announcements, Qt Desktop Days call for talks and registration opening, and Tool of the Month: cutelyst.
In the previous blog post about qHash, we explained: how to declare an overload of qHash for your own datatypes, how to hash Qt datatypes for which Qt does not provide a qHash overload, and why you can't use a type from the Standard Library (or just another library) as a key in QHash (newsflash: […]