KDAB

RSS: https://www.kdab.com/rss.xml
KDAB,全球软件咨询公司,专注 Qt、C++、Rust 与嵌入式 Linux 开发。

⬢ Distrobox:面向开发者的深入指南 - 第一部分

KDAB 发布的 Distrobox 开发者指南第一部分,介绍如何用 Distrobox 简化在不同 Linux 发行版上开发和测试的工作流。文章先对比了虚拟机(QEMU/VMware)和容器(Docker/Podman)的优缺点:虚拟机设置繁琐、资源开销大;容器虽轻量但图形界面、文件共享、工具链集成仍需手动配置且命令冗长。 Distrobox 作为上层封装,自动挂载宿主机的 home、/dev、journal、dbus、X11/Wayland 等,并提供 distrobox-init、distrobox-export、distrobox-host-exec 等工具实现宿主机与容器间的双向命令调用和程序导出,支持 docker、podman、lilipod 后端。 文中用 podman 示例展示了 distrobox create 命令如何展开为一长串 podman create 参数,直观说明其自动化价值。
评论点赞收藏7 天前

MFC/Qt 迁移时处理 OLE-Dispatch 的解决方案

KDAB 分享了一个将 Qt QMetaObject 与 OLE IDispatch 接口桥接的方案,解决 MFC 应用迁移到 Qt 时 OLE 控件初始化兼容问题。通过 QObjectDispatcher 类,QWidget 的属性(Q_PROPERTY)和方法(Q_INVOKABLE)可被原有 MFC/OLE 应用通过 IDispatch 访问。 实现分两步:GetIDsOfNames 查找方法/属性索引,Invoke 执行调用并转换参数。有局限性:不支持方法重载、可选参数、类型映射有限(仅 IUnknown/int/QString),且非线程安全。 完整代码在 KDAB GitHub。
评论点赞收藏41 天前

用环境变量提升 CMake 构建效率

CMake 和 ctest 支持通过环境变量设置默认选项,把常用配置写入 shell 配置文件即可全局生效,无需每次手动传参或创建 CMake preset。 实测中可设置的变量包括 CMAKE_GENERATOR(指定构建工具)、CMAKE_EXPORT_COMPILE_COMMANDS(生成 compile_commands.json)、CTEST_OUTPUT_ON_FAILURE(测试失败时输出日志),CMake 代码中还能通过 $ENV{} 读取自定义环境变量。
评论点赞收藏49 天前

QQuickItem 从加载到可见需要多久?——Qt Quick 帧延迟测量方法

这篇文章给出了一个测量 QQuickItem 从加载到实际显示在屏幕上所需时间的实用方法。作者指出,Qt Quick 按需渲染,不"丢帧"但可能出现延迟显示。 核心方案是:继承 QQuickItem 并监听 visibleChanged 信号,通过 ensurePolished + updatePolish 确保测量发生在组件真正被渲染的帧上,而非因其他动画触发的帧交换导致的误测。 文章详细解释了为何直接用 afterFrameEnd 不够(可能被动画帧提前触发),以及为何需要在 C++ 构造函数中将 visible 设为 false(避免 QML 属性求值顺序导致 visibleChanged 不触发)。 最后以屏幕刷新率将毫秒转换为"跳帧数"作为更稳定的衡量指标。附有完整可复用的 TimedItem C++ 子类代码。适合 Qt Quick 性能调试场景。
评论点赞收藏117 天前

KDAB 赞助并主持 Oxidize 2026 柏林 Rust 大会

KDAB 作为联合主办方将于 2026 年 9 月 14–16 日在柏林举办 Oxidize 2026,这是面向 Rust 生产级工程师的重要会议。KDAB 工程师将主持一场 Rust/C++ 互操作性实战工作坊,CCO Till Adam 也将参与一场关于 Rust 就业市场演变的圆桌讨论。 内容属于公司活动通告,有实用参展信息但缺乏个人视角或深度讨论。
评论点赞收藏132 天前

声明式QML时代的单例控制器

本文介绍了一项改进,允许开发者将对象实例作为单例提供给QML引擎,简化了控制器对象的提供方式。该改进由André Somers贡献,涉及对QQmlEngine和声明式注册代码的修改。
评论点赞收藏146 天前

使用 Rust Crates 构建可复用的 Slint UI 库

Slint 新增了从 Rust crate 导出组件和类型的能力,让开发者可以构建可复用的 UI 库与扩展。本文介绍了实验性模块构建功能的工作原理、slint-compiler 的变更,以及如何在应用中创建和引用自定义 Slint 库。 对于正在使用或评估 Slint 的 Rust GUI 开发者有一定实操参考价值,但整体为 KDAB 官方博客的技术通告,缺乏个人经验或独特观点,行文偏任务式发布。
评论点赞收藏161 天前

在任意数量 QML 元素间同步数值

KDAB 工程师分享了一个实用的 QML 架构方案:通过 C++ 单例作为消息代理,配合递归信号-槽连接,在动态实例化的任意数量 QML 元素间同步属性值。 设计思路清晰,核心价值在于实现 UI 与逻辑的低耦合、可扩展的数值同步,适合 Qt/QML 开发者在复杂界面场景下参考。
评论点赞收藏195 天前

Hotspot v1.6.0 发布

Linux 性能分析 GUI 工具 Hotspot 发布 v1.6.0 版本。Hotspot 以 文件为输入,提供可视化界面解析性能数据,目标是成为 perf report 的现代化替代方案。 本次版本更新由 KDAB 发布,适合使用 Linux perf 进行性能 profiling 的开发者关注具体更新内容。
评论点赞收藏201 天前

Zngur 与 CXX:两种 Rust/C++ 互操作方案的深度对比

本文系统对比了 Rust/C++ 互操作的两种主流方案 Zngur 和 CXX,涵盖设计哲学、容器支持、trait 对象、异步能力、构建系统集成及实际工程中的权衡取舍。 对正在技术选型、需要在 Rust 项目中调用 C++ 代码或反之的工程师,提供了可直接参考的对比维度和决策依据。内容扎实,有具体技术细节而非空泛介绍。
评论点赞收藏209 天前

使用Spix自动化嵌入式开发中的重复性GUI交互

介绍KDAB出品的Spix库,一个面向Qt/QML应用的GUI自动化交互工具。支持模拟点击、文本输入、属性检查等基本操作,并能结合截图与计算机视觉做简单光学检查。 适合嵌入式开发中需要反复测试UI交互的场景。但内容较为概览式,缺少深度示例与个人实操经验。
评论点赞收藏223 天前

KDAB 参展 2026 纽伦堡 Embedded World

KDAB 于 2026 年 3 月 10–12 日在德国纽伦堡 Embedded World 展会设立展位。全文仅一句话交代了参展信息,无任何展品、技术、演讲或现场见闻细节,属于纯粹的公司参展通告,信息密度极低,对读者几乎没有实质价值。
评论点赞收藏225 天前

MSVC 静态初始化顺序调试实战

静态初始化顺序问题(Static Initialization Order Fiasco)是 C++ 中 classic 难题,尤其在 main 执行前发生的诡异崩溃让人抓狂。 本文深入解释了 MSVC 下静态初始化的底层机制——包括动态初始化与静态初始化的执行顺序、翻译单元间依赖的未定义行为,并给出了一种实用的调试方法。 适合被此类 bug 困扰的 C++ 工程师,有直接的排查指导价值。
评论点赞收藏286 天前

增强 KDE Plasma Wayland 的无障碍功能与创作工具

KDAB 团队在 NLnet 资助下,为 KDE Plasma Wayland 会话改进了多项无障碍和创作工具功能。无障碍方面:粘滞键新增弹出通知、系统铃支持视觉闪烁提示(适配听障用户)、系统托盘可显示修饰键粘滞状态,使 Wayland 在无障碍体验上追赶甚至超越 X11。 创作工具方面:绘图板支持自定义板面区域、贝塞尔曲线调节压感曲线、可配置笔按钮映射为鼠标操作(如中键平移画布、右键取色)。 这些更新让 KDE Plasma 在包容性和适应性上更进一步。
评论点赞收藏303 天前

理解C和C++中基于类型的别名分析

核心看点:通过汇编级对比,直观展示C/C++编译器如何利用基于类型的别名分析(TBAA)进行优化。文章从类型系统基础出发,用modifyValues函数在不同优化级别(O0 vs O2)下的不同结果引出未定义行为,再用Foo循环示例展示编译器对非兼容类型(float vs int)会一次性加载循环条件到寄存器以减少内存访问,而对兼容类型(float vs float)则保守地每次迭代都重新读取指针值。 还详细分析了restrict关键字在C中声明无别名关系后编译器如何更激进优化(将*c加载提到循环外复用),以及restrict未进入C++标准的缘由。 对写高性能C/C++代码、理解编译器优化行为的开发者有直接参考价值。
评论点赞收藏338 天前

Mozilla Searchfox 代码浏览器的改进

KDAB 为 Mozilla 的 Searchfox 代码浏览器新增了 Java/Kotlin 索引与 C++ 跨语言绑定分析,以及交互式宏展开显示。Firefox 拥有 2100 万行代码,横跨 C++、JavaScript、Rust 等多语言,Searchfox 是 Mozilla 定制的在线代码浏览工具。 本文深入介绍了如何扩展 Clang 插件来识别 Java native 方法到 C++ 的三种绑定路径(默认 JNI 命名查找、RegisterNatives 动态注册、@WrapForJNI 模板代码生成),以及 C++ 调用 Java 的两种方式,并利用自定义注解实现跨语言跳转和搜索结果双向展示。 此外还实现了按平台/宏定义显示不同展开变体、宏内右键上下文菜单等交互改进。技术细节扎实,有真实代码示例和测试用例参考,适合对大型项目代码导航和跨语言静态分析感兴趣的开发者。
评论点赞收藏651 天前

CLI++:升级你的命令行工具

想升级命令行体验?KDAB 博客整理了十余款现代 CLI 工具替代方案:zoxide 智能跳转目录、fd 毫秒级搜索文件、ripgrep 超快内容检索、bat 语法高亮显示代码、delta 美化 git diff、starship 信息提示符……每款都附具体用法示例和配置说明,还覆盖了 zsh 插件生态、topgrade 一键更新、direnv 按目录管理环境变量等实用推荐。 工具多基于 Rust 重写,性能更好、用法更直觉。适合日常使用 Unix 命令的开发者,评论区开放补充讨论。没有强观点或一手踩坑经验,但信息密度不错,是一份可落地的效率工具参考清单。
评论点赞收藏671 天前

使用 CMake 设置 C++ 宏定义:为什么 configure_file 优于 add_definitions

CMake 中设置 C++ 宏定义的推荐做法:用 configure_file 生成头文件代替 add_definitions,可以显著减少不必要的重新编译。作者 David Faure(KDAB 资深工程师)通过版本号和开关选项两个典型场景,对比了从 add_definitions → target_compile_definitions → configure_file 的演进路径,解释了为什么每次修改定义都会触发全量重编——在大型项目中可能浪费数小时。 文章还涵盖了 cmakedefine01 与 cmakedefine 的选择、如何用 -Werror=undef 在忘记 include 时报错、MSVC 等效选项(/we4668),以及评论区读者分享的 constexpr 命名空间方案和 extern 分离编译技巧。 作者本人也下场回应读者关于 COMPILE_DEFINITIONS 和 -Wundef 的质疑,讨论有来有回。适合所有使用 CMake 的 C++ 开发者阅读。
评论点赞收藏685 天前

用Nix替代Yocto构建嵌入式系统镜像

嵌入式系统镜像构建传统上用Yocto或Buildroot,但Nix凭借纯函数式语言、超过8万官方维护包、声明式配置和可复现构建,正成为一种有力替代方案。 作者以树莓派3B为实例,从零构建完整系统镜像——包含自定义Linux内核、Mesa图形栈、Qt 6全量编译,并集成GammaRay调试工具,给出了完整的flake.nix配置文件和交叉编译方案。 文章详细对比了两种交叉编译方式(qemu用户态模拟 vs 原生交叉编译),展示了Nix overlay机制如何优雅解决QT_HOST_PATH等跨编译难题,还提供了QEMU测试脚本。 同时坦诚指出Nix在嵌入式领域生态不如Yocto成熟、冷门平台支持少、学习曲线陡峭等短板。对嵌入式Linux开发者来说,这是一份既给思路又给代码的实操指南,而非空泛趋势解读。
评论点赞收藏704 天前

C++20 中的同步原语

对于关注 C++ 并发编程的开发者:本文介绍 C++20 新增的 std::latch 和 std::barrier 两种同步原语。latch 是一次性计数器,线程可递减计数器等待归零后通过,不可复用;barrier 可重复使用,所有线程先到达同步点后一起放行,再等待下一轮。 文章给出了基础代码示例和典型场景(latch 用于初始化完成等待、一次性发令信号;barrier 用于迭代算法同步、周期性状态同步),并简要提及线程调度、输出同步、错误处理等注意事项。 然而本文是 KDAB 的企业技术博客通稿,内容止步于官方文档级别的入门讲解,没有个人经验、踩坑记录、性能分析或独到见解,属于标准的知识普及文。
评论点赞收藏754 天前

在 QML 中格式化选中文本

QML 的 TextEdit 默认不支持对选中文本单独设置粗体/字体等格式,这与 Qt Widgets 的便捷形成鲜明对比。文章先展示了一个"hacky"的纯 QML/JS 方案:通过 getFormattedText 取出选中区域的 HTML 源码,插入/移除标签再写回,操作繁琐且难扩展。 接着深入剖析 Qt 6.7 新增的 cursorSelection 属性的 C++ 实现源码(QQuickTextSelection),看它如何借助 QTextCursor + QTextCharFormat 直接操作字符级格式。 最后给出一个不依赖 Qt 6.7 的完整方案:用 QML 附加属性(attached property)封装 C++ 层,通过监听 selectedTextChanged、cursorPositionChanged、contentsChange 信号同步光标选区状态,实现与 Qt 6.7 内置方案等价的功能。 代码完整、思路清晰,对需要在旧版 Qt 中实现富文本编辑的开发者有直接复用价值。
评论点赞收藏796 天前

登录芦苇

登录后关注作者、收藏内容和参与讨论。