Trusted Software Excellence across Desktop and Embedded
Take a glance at the areas of expertise where KDAB excels ranging from swift troubleshooting, ongoing consulting and training to multi-year, large-scale software development projects.
Find out why customers from innovative industries rely on our extensive expertise, including Medical, Biotech, Science, Renewable Energy, Transportation, Mobility, Aviation, Automation, Electronics, Agriculture and Defense.
High-quality Embedded Engineering across the Stack
To successfully develop an embedded device that meets your expectations regarding quality, budget and time to market, all parts of the project need to fit perfectly together.
Learn more about KDAB's expertise in embedded software development.
Where the capabilities of modern mobile devices or web browsers fall short, KDAB engineers help you expertly architect and build high-functioning desktop and workstation applications.
Extensible, Safety-compliant Software for the Medical Sector
Create intelligent, patient-focused medical software and devices and stay ahead with technology that adapts to your needs.
KDAB offers you expertise in developing a broad spectrum of clinical and home-healthcare devices, including but not limited to, internal imaging systems, robotic surgery devices, ventilators and non-invasive monitoring systems.
Building digital dashboards and cockpits with fluid animations and gesture-controlled touchscreens is a big challenge.
In over two decades of developing intricate UI solutions for cars, trucks, tractors, scooters, ships, airplanes and more, the KDAB team has gained market leading expertise in this realm.
Build on Advanced Expertise when creating Modern UIs
KDAB assists you in the creation of user-friendly interfaces designed specifically for industrial process control, manufacturing, and fabrication.
Our specialties encompass the custom design and development of HMIs, enabling product accessibility from embedded systems, remote desktops, and mobile devices on the move.
Legacy software is a growing but often ignored problem across all industries. KDAB helps you elevate your aging code base to meet the dynamic needs of the future.
Whether you want to migrate from an old to a modern GUI toolkit, update to a more recent version, or modernize your code base, you can rely on over 25 years of modernization experience.
KDAB offers a wide range of services to address your software needs including consulting, development, workshops and training tailored to your requirements.
Our expertise spans cross-platform desktop, embedded and 3D application development, using the proven technologies for the job.
When working with KDAB, the first-ever Qt consultancy, you benefit from a deep understanding of Qt internals, that allows us to provide effective solutions, irrespective of the depth or scale of your Qt project.
Qt Services include developing applications, building runtimes, mixing native and web technologies, solving performance issues, and porting problems.
KDAB helps create commercial, scientific or industrial desktop applications from scratch, or update its code or framework to benefit from modern features.
Discover clean, efficient solutions that precisely meet your requirements.
Boost your team's programming skills with in-depth, constantly updated, hands-on training courses delivered by active software engineers who love to teach and share their knowledge.
Our courses cover Modern C++, Qt/QML, Rust, 3D programming, Debugging, Profiling and more.
The collective expertise of KDAB's engineering team is at your disposal to help you choose the software stack for your project or master domain-specific challenges.
Our particular focus is on software technologies you use for cross-platform applications or for embedded devices.
Since 1999, KDAB has been the largest independent Qt consultancy worldwide and today is a Qt Platinum partner. Our experts can help you with any aspect of software development with Qt and QML.
KDAB specializes in Modern C++ development, with a focus on desktop applications, GUI, embedded software, and operating systems.
Our experts are industry-recognized contributors and trainers, leveraging C++'s power and relevance across these domains to deliver high-quality software solutions.
KDAB can guide you incorporating Rust into your project, from as overlapping element to your existing C++ codebase to a complete replacement of your legacy code.
Unique Expertise for Desktop and Embedded Platforms
Whether you are using Linux, Windows, MacOS, Android, iOS or real-time OS, KDAB helps you create performance optimized applications on your preferred platform.
If you are planning to create projects with Slint, a lightweight alternative to standard GUI frameworks especially on low-end hardware, you can rely on the expertise of KDAB being one of the earliest adopters and official service partner of Slint.
KDAB has deep expertise in embedded systems, which coupled with Flutter proficiency, allows us to provide comprehensive support throughout the software development lifecycle.
Our engineers are constantly contributing to the Flutter ecosystem, for example by developing flutter-pi, one of the most used embedders.
KDAB invests significant time in exploring new software technologies to maintain its position as software authority. Benefit from this research and incorporate it eventually into your own project.
Start here to browse infos on the KDAB website(s) and take advantage of useful developer resources like blogs, publications and videos about Qt, C++, Rust, 3D technologies like OpenGL and Vulkan, the KDAB developer tools and more.
The KDAB Youtube channel has become a go-to source for developers looking for high-quality tutorial and information material around software development with Qt/QML, C++, Rust and other technologies.
Click to navigate the all KDAB videos directly on this website.
In over 25 years KDAB has served hundreds of customers from various industries, many of them having become long-term customers who value our unique expertise and dedication.
Learn more about KDAB as a company, understand why we are considered a trusted partner by many and explore project examples in which we have proven to be the right supplier.
The KDAB Group is a globally recognized provider for software consulting, development and training, specializing in embedded devices and complex cross-platform desktop applications.
Read more about the history, the values, the team and the founder of the company.
When working with KDAB you can expect quality software and the desired business outcomes thanks to decades of experience gathered in hundreds of projects of different sizes in various industries.
Have a look at selected examples where KDAB has helped customers to succeed with their projects.
KDAB is committed to developing high-quality and high-performance software, and helping other developers deliver to the same high standards.
We create software with pride to improve your engineering and your business, making your products more resilient and maintainable with better performance.
KDAB has been the first certified Qt consulting and software development company in the world, and continues to deliver quality processes that meet or exceed the highest expectations.
In KDAB we value practical software development experience and skills higher than academic degrees. We strive to ensure equal treatment of all our employees regardless of age, ethnicity, gender, sexual orientation, nationality.
Interested? Read more about working at KDAB and how to apply for a job in software engineering or business administration.
At KDAB, we have been investigating how to integrate Rust with Qt in a safe and idiomatic way. The solution we are currently working on is called CXX-Qt. It's available in the GitHub and on crates.io. This blog post discusses the journey of CXX-Qt -- where it started, where it can be used right now, and the future direction of the project. If you would like to get started with code examples, visit our Rust book.
Why Rust?
Over the past few years, Rust has been gaining popularity in various sectors, from embedded devices to scalable web services. It brings the promise of performance, reliability, and productivity to every sector into which it has been introduced. In addition, Rust is useful from a security perspective due to its memory safety. For instance, a substantial amount of security issues in large-scale C or C++ projects tends to be memory-related. By using Rust, we reduce these kinds of issues while maintaining a level of performance that is on-par with other native languages, like C or C++, and far faster compared to most other memory-safe languages.
Where Would Rust Be Useful with Qt?
Typical Qt QML applications are composed of multiple parts:
C++ plugins that provide models and represent the business logic
QML, which defines the layout and components of the GUI
JavaScript, for scripting in QML
Rust has a rich ecosystem of libraries for (de)serialization, async futures, parsing unsafe inputs, threading, etc. The ability to integrate these Rust libraries into your Qt application makes a compelling story. Therefore, enhancing your C++ plugins and business logic is the most suitable use case for Rust. Due to QML's fast iteration speed and flexibility, we recommend sticking with it for the layout and components of the GUI.
Existing Solutions
There are many techniques for combining Rust with Qt, each utilizing different ways to bind between Rust and Qt. We found that most solutions tend to have one or more of these problems:
Direct bindings that are not idiomatic to Rust and only provide direct access to the C++ API
Calls between C++ and Rust that are unsafe
They don't make use of Rust's strong multi-threading guarantees or features
They don't have a license that suits the Rust ecosystem
The attempt to use Rust for the whole application rather than just a plugin
No code generation; developers need to manually define the bindings
Our Solution
Rather than simply providing bindings for the existing C++ API, CXX-Qt makes use of Qt's strong object orientation and meta object system. The library allows you to define new QObject subclasses in Rust as a module. These can then be instantiated like any other QObject in QML, or even C++, if needed.
Every QObject defined by CXX-Qt is made up of two parts:
A C++-based QObject instance that stores and exposes properties and invokable methods
A Rust struct that implements any invokables, manages internal state, and handles change requests from properties or background threads
CXX-Qt then uses a library called CXX to communicate between Rust and C++. CXX is also being explored by large companies, such as Google, with autocxx. In comparison to normal bindings, CXX creates a bridge between Rust and C++ that is based on a safe subset of the two languages. By using procedural macros, we hide the details of the CXX bridge from you as a developer. We also provide a library of common Qt types that can cross the C++ <-> Rust bridge safely. We furthermore provide mechanisms for Rust background threads to notify and safely update the Qt state on the Qt thread.
All of this results in very idiomatic and safe Rust code that can seamlessly interact with existing Qt/C++ and Rust code.
The disadvantage of this approach is that we do not provide one-to-one bindings. Therefore, CXX-Qt needs to expose and implement every feature across the bridge. However, as the main focus of our solution is moving a C++ module to Rust, we believe that, for a majority of cases, we will be providing either a QObject or a model to QML and then exposing properties, invokables, and signals on these objects.
Current State and Future Direction
CXX-Qt is not production-ready or stable and is still a work-in-progress. We welcome any feedback on the direction of the project and features and/or any suggestions you may have.
Currently, the existing code is able to perform the following tasks:
Define properties and invokables, exposing them onto a QObject
Use common Qt types
Listen for property changes or handle update requests from background Rust threads
In the future, we plan to add the following tasks/features:
Other Qt base classes (such as QAbstractItemModel)
Stabilize the API of macros and improve the API of Qt types
Define and emit signals
Expand the documentation to include tutorials and examples
Please feel free to share any suggestions or questions in the blog comments or, if you prefer, send us an email at info@kdab.com.
Rust training course
In collaboration with Ferrous Systems we now offer an "Introduction to Rust" training course. Learn how to write safe concurrent programs, leverage error handling, and use Rust’s documentation for research and troubleshooting. Find out more...
About KDAB
Trusted software excellence across embedded and desktop platforms
The KDAB Group is a globally recognized provider for software consulting, development and training, specializing in embedded devices and complex cross-platform desktop applications. In addition to being leading experts in Qt, C++ and 3D technologies for over two decades, KDAB provides deep expertise across the stack, including Linux, Rust and modern UI frameworks. With 100+ employees from 20 countries and offices in Sweden, Germany, USA, France and UK, we serve clients around the world.
While I'm always happy to see more interest in integrating Rust and Qt, if you're so focused on QML, I'm puzzled why you didn't join forces with the existing QMetaObject crate. I don't see any mention of it here.
3 - Mar - 2022
Andrew Hayzen
Hi Stephan,
Thanks for the comment!
We did investigate qmetaobject-rs; however, we felt there were a few problems with it. As the question of comparisons to other attempts keeps coming up, I think we will add a section in the book comparing the differences since they all have their own advantages and disadvantages.
Some of the differences between CXX-Qt and qmetaobject-rs are use of procedural attribute macro rather than derive macros allowing for more idiomatic Rust code (we can integrate well later with other Rust libraries like serde), using CXX rather than cpp internally to reduce unsafe code and improve maintainability, clear multi-threading story, and exposing API as a bridge rather than direct API to match Qt's (we see this as an advantage for our purposes, others may see this as a disadvantage for theirs as you can't call Qt API directly) etc. If we add a section in the book then we'll try and explain the differences and reasons in more detail.
Thanks,
Andrew
Andrew Hayzen
Senior Software Engineer
Andrew Hayzen is a Senior Software Engineer at KDAB
Our hands-on Modern C++ training courses are designed to quickly familiarize newcomers with the language. They also update professional C++ developers on the latest changes in the language and standard library introduced in recent C++ editions.
2 Comments
2 - Mar - 2022
Stephan Sokolow
While I'm always happy to see more interest in integrating Rust and Qt, if you're so focused on QML, I'm puzzled why you didn't join forces with the existing QMetaObject crate. I don't see any mention of it here.
3 - Mar - 2022
Andrew Hayzen
Hi Stephan,
Thanks for the comment!
We did investigate qmetaobject-rs; however, we felt there were a few problems with it. As the question of comparisons to other attempts keeps coming up, I think we will add a section in the book comparing the differences since they all have their own advantages and disadvantages.
Some of the differences between CXX-Qt and qmetaobject-rs are use of procedural attribute macro rather than derive macros allowing for more idiomatic Rust code (we can integrate well later with other Rust libraries like serde), using CXX rather than cpp internally to reduce unsafe code and improve maintainability, clear multi-threading story, and exposing API as a bridge rather than direct API to match Qt's (we see this as an advantage for our purposes, others may see this as a disadvantage for theirs as you can't call Qt API directly) etc. If we add a section in the book then we'll try and explain the differences and reasons in more detail.
Thanks,
Andrew