qml note

本文探讨了Qt QML在解析组件时的情况,尤其是MouseArea的管理。当组件为系统默认时,可能共享MouseArea,影响事件响应;自定义组件则会分别解析,避免相互干扰。在窗口管理方面,解释了如何处理父子窗口的层级关系以达到所需排序,以及在悬浮框和弹框交互中的问题,提出初始化时不隐藏或使用showMinimized()来避免某些bug。此外,还介绍了如何将C++变量传递给QML使用,包括注册C++类到QML以及通过类名访问的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

qml 解析:

如果例如Main.qml里面的组件都是系统的,比如Window,Rectangle等,他们的MouseArea可能是共享的,qml

解析为C++,可能会把他们放在一个源文件,如果功能复杂一下,MouseArea可能可能会不太好控制,可能会影响到主窗口的

事件相应,如果是自定义的组件,qml 解析为c++会解析为2个源文件,这样他们的MouseArea就是各自独立的,不会共享,

可以根据具体的需求看用哪一种办法

 

当有2个对话框或者flags:SubWindow等时,

如果他们有父子关系,责默认情况下时父窗口永远在子窗口下面,

所以无论如何设置父窗口指定,子窗口置底等方法,得到的结果都是

父窗口在子窗口下面,如果需要这里设置得父窗口在子窗口上面,就需要

调整他们得父子关系,或者通过改为另外得基础关系,实现需要得窗口排序功能,

比如可以把他们放到另一个组件同一层次,从而来改变他们得排序,实现需要的

窗口排序功能

 

qml悬浮框点击弹框效果,当都是在主窗口上面加载的(Loader),如果初始华悬浮窗口的弹框

为隐藏状态,点击悬浮框后弹出弹框后,当主窗口最小化的时候,弹框也会跟着隐藏最小化,而且

再点击悬浮框的时候弹框不会显示,触发主窗口显示出来了,弹框才会显示,就是弹框的显示依赖于主窗口

可能这不是需要的效果,如何才能解决这个问题呢,如果可以的话,可以考虑用这种办法(暂时没有想到其他办法)实现,

初始化的时候不用隐藏,直接移动窗口看不见就可以了,就相当于达到了隐藏的效果了

还有一种办法也是可以的item.hide()改为item.showMinimized()就可以,这样即达到了窗口隐藏的目的,也可以避免

设置为hide()导致一些bug

窗口获取可以使用这个办法试一下:
focus : bool

This property holds whether the item has focus within the enclosing FocusScope. If true, this item will gain active focus when the enclosing FocusScope gains active focus.
In the following example, input will be given active focus when scope gains active focus:

 Rectangle {
     width: 100; height: 100

     FocusScope {
         id: scope

         TextInput {
             id: input
             focus: true
         }
     }
 }
Rectangle {
    color: CusConfig.backgroundColor
    MouseArea {
        id: backgroundArea
        anchors.fill: parent
        onClicked: {
            focus = true
        }
    }
}

如果需要把c++中的变量传递给qml使用,可以使用c++和qml混合编程,

1.通过注册c++类到qml中使用:

qmlRegisterType<类名>("qml引入包的名称", 1, 0, "qml访问的类目");

2.可以通过类的名称注册,从而再qml中使用:

QQmlApplicationEngine::rootContext()->setContextProperty("qmlname", 这里写c++类名称);

这样qml中就可以直接使用qmlname进行访问该C++类的名称了

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值