KDAB

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

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

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

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

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

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

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

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

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

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

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

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

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

Hotspot v1.6.0 发布

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

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

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

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

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

KDAB 参展 2026 纽伦堡 Embedded World

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

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

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

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

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

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

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

Mozilla Searchfox 代码浏览器的改进

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

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

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

使用 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++ 开发者阅读。
评论点赞收藏640 天前

用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开发者来说,这是一份既给思路又给代码的实操指南,而非空泛趋势解读。
评论点赞收藏659 天前

C++20 中的同步原语

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

在 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 中实现富文本编辑的开发者有直接复用价值。
评论点赞收藏751 天前

Rust 与 C++ 集成的明智之道

C++项目中如何策略性地引入Rust?本文给出具体工程建议:优先将易出bug、有安全漏洞且接口清晰的模块(如图像处理库、解析器)迁移到Rust;架构上权衡C++核心还是Rust核心,需特别注意线程和内存所有权的跨语言复杂性;稳定且经过充分测试的C++代码(如信号处理、密码学)不应为赶时髦而重写;Rust生态尚年轻,包维护风险和高频语言演进不适合对稳定性要求极高的长期项目。来自KDAB一线工程师,适合正在评估Rust/C++混合架构的嵌入式与系统开发者参考。文章末尾导向公司咨询与培训服务。
评论点赞收藏779 天前

Qt与C++平凡可重定位探讨(第3篇)

平凡可重定位(trivial relocation)的定义只涉及移动构造+析构能否替换为memcpy,但包含引用成员的类型IntRef在赋值时具有write-through语义。当vector删除元素时,标准规定必须使用移动赋值,而Qt对平凡可重定位类型直接用memmove优化删除——这就产生了矛盾:IntRef满足平凡可重定位,却不能用memmove删除。本文用完整代码示例拆解了std::vector::erase在不同策略下的行为差异(左移vs旋转),并引出了待解决的多个可能方向:修改vector删除策略、禁止IntRef入容器、Qt放弃memmove删除优化或修正平凡可重定位定义。适合对C++内存模型和容器实现细节感兴趣的读者。
评论点赞收藏791 天前

KDGpu 0.5.0 发布:Vulkan 封装库现已集成 OpenXR

KDGpu 是 KDAB 公司为 Vulkan 开发的 C++ 封装库,旨在降低直接使用 Vulkan 的繁琐度。0.5.0 版本的核心更新包括:通过新增可选库 KDXr 封装 OpenXR,大幅简化跨平台 VR/AR 应用的初始化、投影层渲染、头部追踪和手柄输入等流程,并配有多视口示例;扩展设备兼容性,放宽了对 Vulkan 1.2 的硬依赖,现在可运行于 Meta Quest 等 Vulkan 1.1 设备;支持外部内存和图像句柄导出/导入,便于与 CUDA 等其他 API 互通;新增原生 Android(可直接在 Android Studio 运行)和 iOS 示例,以及独立的 KDGpu Examples 仓库(含 N-Body 计算等更深入的示例)。本文是一篇标准的公司技术博客版本发布公告,包含代码片段和功能说明,末尾附有公司商业服务介绍。
评论点赞收藏807 天前

登录芦苇

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