我正在为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,但它会在方向更改动画完成之前以及在调整应用程序的宽度之前触发。宽度完成更改后,有什么方法可以触发我的代码吗?
答案 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 )
}
}
}