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

浙公网安备 33010602011771号