方向变更的QML信号完成

时间:2019-01-22 20:28:21

标签: qt qml

我正在为iPad开发ESRI AppStudio应用程序(AppStudio 3.1,Qt 5.11),并且当方向改变时,需要对QML控件进行一些调整。我发现此页面似乎描述了执行此操作的官方方法:https://wiki.qt.io/QML_orientation_observer

import QtQuick.Window 2.2
Rectangle {
    property bool isPortrait: Screen.primaryOrientation === Qt.PortraitOrientation || Screen.primaryOrientation === Qt.InvertedPortraitOrientation
    onIsPortraitChanged: console.log("isPortrait", isPortrait)
}

但是,我发现该页面上的声明是,在完成高度和宽度更改后,绑定将被触发是不正确的。当我实现此功能时,我看到的是在方向更改时确实会触发onIsPortraitChanged,但它会在方向更改动画完成之前以及在调整应用程序的宽度之前触发。宽度完成更改后,有什么方法可以触发我的代码吗?

2 个答案:

答案 0 :(得分:0)

这是我找到的解决方案,但它仅适用于应用全屏显示的设备,并且可能会有更干净的方法来实现。

import QtQuick.Window 2.2
Window {
    id: app
    visible: true
    width: 640
    height: 480

    Rectangle {
        anchors.fill: parent
        onWidthChanged: {
            if(app.width === Screen.width || app.width === Screen.height) {
                //calculate new size
            }
        }
    }
}

答案 1 :(得分:0)

对于带有orientationchanged的正确信号,我没有问题获得新宽度

import QtQuick.Window 2.12
Window {
    id: app
    visible: true
    width: 640
    height: 480
    Screen.orientationUpdateMask:  Qt.LandscapeOrientation | Qt.PortraitOrientation
    ...
    ...
    Connections{
        target: my_object
        Screen.onPrimaryOrientationChanged:{
            console.log("orinetation changed, width: " + width )
        }
    }

}