文章分类 -  Qml 中的那些坑

Qml 是一个非常强大的用户界面开发语言,但在使用过程中,开发者可能会遇到一些常见的问题或“坑”。 了解这些潜在的问题并采取适当的预防措施,可以帮助开发者避免这些“坑”,从而更顺利地进行 Qml 应用开发。
摘要:【写在前面】 在 Qml 中,很多时候我们需要动态创建一些 Qml 对象,通常是:createComponent + createObject 或 createQmlObject。 然而,最近工作中却出现了一个相当难以察觉的问题:动态创建的窗口在某些时刻会被莫名其妙的删除,我花了很多时间才定位到关键 阅读全文
posted @ 2024-08-25 20:17 梦起丶 阅读(111) 评论(0) 推荐(0)
摘要:Qml 中的那些坑(五)---MouseArea 上的 ListView 滚轮事件穿透最近在 Qml 中使用 `MouseArea` 时发现了一个奇怪的现象: 位于 `MouseArea` 上的 `ListView` 在处理了滚轮事件的情况下进行滚轮,下面的 `MouseArea` 却在某些情况下接收到了这个事件。 按照直觉,`ListView` 明明有内部的滚轮事件处理,应该阻止事件向下传递才对,然而此时的情况却出乎意料,因此在此记录并附上解决方案。 阅读全文
posted @ 2024-04-22 18:15 梦起丶 阅读(110) 评论(0) 推荐(0)
摘要:Qml 中的那些坑(四)---MouseArea 的 Click / Hover 事件穿透我们在 Qml 中经常会遇到这样的情况: 有某个 Item ( 这里称为 Parent ),需要它在鼠标 `Enter` 时显示,鼠标 `Exit` 时隐藏。 这时候我们会用一个 MouseArea,然后处理 `onEntered / onExited`。 但是,有一个巨大的坑: 如果这个 Item 里嵌入了其他 Item ( 这里称为 `Child` ) 并且处理自己的 MouseArea,则会导致 `Parent Item` 的 MouseArea 失效 ( 即不能接收到相应的事件 )。 阅读全文
posted @ 2024-04-20 22:42 梦起丶 阅读(355) 评论(0) 推荐(0)
摘要:Qml 中的那些坑(三)---KeyEvent 的 key / virtualKey / scanCode在 Qt 中,对于一个键盘事件QKeyEvent ,通常包含三种键值: key:Qt 键值,例如 Qt::Key_Escape。 nativeVirtualKey:本机虚拟键值,例如 VK_ESCAPE ( windows )。 nativeScanCode:本机扫描码。 阅读全文
posted @ 2024-04-19 11:12 梦起丶 阅读(166) 评论(0) 推荐(0)
摘要:Qml 中的那些坑(二)---QWindow 的 closeEvent在很多应用中,很可能会需要这样的功能: 我们点击窗口上的 × (关闭),并不是要真的退出应用,而是要它们以小托盘的形式继续运行。 情况 1:如果 × 是自定义的按钮,我们可以轻易控制它的行为,hide -> system tray。 情况 2:如果 × 是窗口自带的按钮,那么对于 QWidgets 来说,我们只需要重写其 closeEvent方法,然后实现想要的动作。然鹅,对于 Qml 的 Window ( 即 QQuickWindow ),会发现一些问题。 阅读全文
posted @ 2024-04-18 20:36 梦起丶 阅读(168) 评论(0) 推荐(0)
摘要:Qml 中的那些坑(一)---Image 的内存在QML中,Image是一个常用的控件,用于在界面中显示图片。然而,当程序中大量使用Image控件时,我发现内存占用异常高。通过实验,每增加一张大尺寸图片,内存占用就会显著增加。 为了解决这个问题,我在Qt的文档中找到了解决方案:使用sourceSize属性。这个属性可以限制加载到内存中图像的实际大小,从而减少内存占用。我通过设置sourceSize为窗口的尺寸,成功将内存占用从80MB降低到了20MB。 阅读全文
posted @ 2024-04-17 23:45 梦起丶 阅读(287) 评论(0) 推荐(0)