Choosing the right CI/CD tool can make or break your development workflow. In this post, KDAB’s Jan Marker compares Buildbot, Jenkins, and GitHub Actions - exploring their strengths, trade-offs, and ideal use cases. You’ll also learn about helper tools like CMake Presets and pre-commit that can make your CI setup smoother and more efficient.
This workflow uses Git's --rebase-merges and --update-refs features to manage multiple branches without ever switching between them. By committing everything to a single integration branch and using interactive rebase to restructure and update multiple branches at once, you maintain clean history, adapt to any review system, and avoid branch divergence - all using native Git tools.
GitHub Copilot’s new Agent mode takes AI-assisted coding beyond autocomplete - scanning your whole project to plan and propose cross-language changes. In this post, we test it on a real-world QML/C++ app, showing how Agent mode automates complex refactoring while still requiring developer oversight.
Building efficient desktop applications requires strategies that address common development bottlenecks. From reducing compilation times with precompiled headers, caching, and distributed builds, to mastering multithreading with sanitizers and safe structures, designing extensible plug-in systems, simplifying configuration via text-based files, and leveraging shared libraries for modularity - these best practices streamline development while boosting performance and maintainability.
In this episode, we explore how to host and run your own Ollama models on a dedicated server, from setup to integration. We discuss the difficulty of self-hosting, how Ollama works, its scalability, and the available model repository. You’ll also see a live demo, watch Jan interact directly with a model, and learn how to connect Qt Creator to your own hosted model.
The integration of artificial intelligence into software development environments has rapidly evolved, and Qt Creator is no exception. With the introduction of the Qt AI Assistant by Qt Company, developers working with Qt Creator now have access to AI models through the IDE. This post provides an introduction to the Qt Creator plugin.
This is part 1 of an ongoing series about AI coding with Qt.
When coding using AI, there are so many options to choose from, including just typing your questions into ChatGPT and using the model for continuous code completions and suggestions. However, the underlying issue is understanding what options are better - should you use a general purpose model or one specifically trained to your language? Should you host them locally, in server farms, or with the providers?
Robust embedded software quality relies on integrated testing: unit tests with frameworks like Google Test, HAL to isolate hardware, HIL or virtual hardware testing, data-driven test automation, and streamlined crash reporting to ensure reliability and maintainability.
In this episode, Jan walks us through a normal setup of Qt AI Assistant for Qt Creator using ChatGPT's models.
In this mini-series, we investigate what the state of the art is for AI-assisted software development. We will start out with looking at Qt Creator, and the newly released Qt AI Assistant.
In CXX-Qt 0.8.0, Rust applications now have a way to forward structured log events from the tracing crate to the Qt logging system. This enables unified logging output across Rust and Qt, enabling consistent formatting, better filtering, and easier integration with tools like GammaRay. By leveraging qt_message_output and QMessageLogContext, developers can bridge Rust's log metadata with Qt's categorized logging infrastructure.
In this video, Florian (CEO, Ferrous Systems) and Till Adam (CFO, KDAB) explore how integrating Rust with existing C++ projects can be a powerful approach, and share helpful resources for those looking to get started.
The YouTube series "Qt Widgets and More" covers aspects of model/view in one way or the other in 21 episodes. We've already seen one episode in this series, which leaves us with 20 more to go. This episode will give you pointers to all of these.
Selection in the model/view framework manages to be very powerful and very confusing at the same time - in this episode we will try to clarify the confusion.
Delegates allow you to customize how each cell in a list, table or tree is painted. This episode covers how they are implemented, and how they are instantiated on your lists, tables or trees.
This blog examines balancing API stability and flexibility. Internal APIs should remain adaptable for ongoing improvements, while external APIs need stability through versioning (e.g., SemVer) and source compatibility guarantees to avoid breaking clients. It also covers ABI stability for libraries and suggests using a buffer layer to isolate internal changes from public interfaces.
In the previous episode we discussed the foundation of proxy models; in this episode I'll show you two implementations of such proxy models.
One of the most important features of Qt's model/view framework is without a doubt proxy models. This episode covers these.
Qt has two sub-classes of QAbstractItemModel which you do not need to subclass, namely QStringListModel and QStandardItemModel. This episode will take a look at those.
Learn how to create custom fmt::formatter specializations in C++ to enable readable, indented output for nested structs. This guide demonstrates using CRTP and helper utilities to format complex types with indentation levels, making logging with fmt and spdlog more human-friendly.