
Qml 中的那些坑
文章平均质量分 72
该专栏深入探讨了在使用Qml 进行开发时遇到的各种问题和挑战。Qml 是Qt框架的一部分,用于构建用户界面和图形界面,但由于其复杂性和某些设计上的限制,开发者在使用过程中可能会遇到一系列难以察觉和解决的“坑”。
梦起丶
这个作者很懒,什么都没留下…
展开
-
Qml 中的那些坑(八)---openUrlExternally 在 Linux 和 Windows 平台的不一致行为
在使用 Qml 的函数时,开发者可能会遇到在 Linux 和 Windows 平台之间行为不一致的问题,尤其是在处理文件 URL 时。本文将深入探讨这一问题的成因及解决方案。很多时候,我们在开发跨平台应用时,需要理解平台之间的差异。总的来说,优先考虑使用这样的函数,来处理本地文件的 URL 转换,避免手动拼接带来的麻烦。原创 2025-01-15 19:13:20 · 377 阅读 · 0 评论 -
Qml 中的那些坑(七)---ComboBox嵌入Popup时,滚动内容超过其可见区域不会关闭ComboBox弹窗
最近在写信息提交的窗口时发现一个奇怪的 BUG:可以看到,当 ComboBox 嵌入 Popup 时,点开 ComboBox,然后滚动内容超过其可见区域并不会关闭 ComboBox 弹窗,并且会超出其父 Popup 范围。原创 2024-11-11 18:25:28 · 320 阅读 · 0 评论 -
Qml 中的那些坑(六)---对象被错误删除,看不见的垃圾回收
在 Qml 中,很多时候我们需要动态创建一些 Qml 对象,通常是:createComponent + createObject 或createQmlObject。然而,最近工作中却出现了一个相当难以察觉的问题,花了很多时间才定位到关键位置。其根本原因在于:未给动态创建的对象分配 parent ( 即:没有任何对象持有其引用 ),结果就是,当 Qml 引擎运行垃圾回收时,这些对象会被错误清除掉。原创 2024-04-14 16:28:43 · 690 阅读 · 1 评论 -
Qml中的那些坑(五)---MouseArea上的ListView滚轮事件穿透
最近在 Qml 中使用 MouseArea 时发现了一个奇怪的现象:位于 MouseArea 上的 ListView 在处理了滚轮事件的情况下进行滚轮,下面的 MouseArea 却在某些情况下接收到了这个事件。按照直觉,ListView 明明有内部的滚轮事件处理,应该阻止事件向下传递才对,然而此时的情况却出乎意料,因此在此记录并附上解决方案。原创 2022-11-28 09:00:00 · 2033 阅读 · 2 评论 -
Qml 中的那些坑(四)---MouseArea 的 Click / Hover 事件穿透
【写在前面】我们在 Qml 中经常会遇到这样的情况:有某个 Item ( 这里称为 Parent ),需要它在鼠标 Enter 时显示,鼠标 Exit 时隐藏。这时候我们会用一个 MouseArea,然后处理 onEntered / onExited。但是,有一个巨大的坑:如果这个 Item 里嵌入了其他Item ( 这里称为 Child )并且处理自己的 MouseArea,则会导致 Parent Item 的 MouseArea 失效( 即不能接收到相应的事件 )。本篇主要内..原创 2021-04-16 23:30:49 · 8613 阅读 · 5 评论 -
Qml中的那些坑(三)---KeyEvent 的 key / virtualKey / scanCode
【写在前面】在 Qt 中,对于一个键盘事件 QKeyEvent ,通常包含三种键值:1、key:Qt 键值,例如Qt::Key_Escape。2、nativeVirtualKey:本机虚拟键值,例如 VK_ESCAPE ( windows )。3、nativeScanCode:本机扫描码。【正文开始】在 Qml 中,也存在着键盘事件:KeyEvent。看起来它...原创 2019-12-22 17:27:24 · 3480 阅读 · 1 评论 -
Qml中的那些坑(二)---QWindow的closeEvent
【写在前面】在很多应用中,很可能会需要这样的功能:我们点击窗口上的 × ,并不是要真的退出应用,而是要它们以小托盘的形式继续运行。情况 1:如果 × 是自定义的按钮,我们可以轻易控制它的行为,hide ->system tray。情况 2:如果 × 是窗口自带的按钮,那么对于QWidgets 来说,我们只需要重写其 closeEvent 方法,然后实现想要的动作。然鹅,对...原创 2019-11-13 23:33:57 · 4208 阅读 · 0 评论 -
Qml 中的那些坑(一)---Image 的内存
【写在前面】首先,要提一个版本bug。因为一个类似的bug是在Qt 5.13.0 中 ( 5.12 则没有),由QQuickPaintedItem引起的。详见:https://bugreports.qt.io/browse/QTBUG-78063同样的,使用Image后,也会无限增长内存。但是先忽略这个bug,因为这里要讲的是Image的内存。【正文开始】在qml中,I...原创 2019-09-13 00:24:10 · 5998 阅读 · 1 评论