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++类的名称了