Android上的QML Canvas,定位问题

时间:2014-09-14 02:53:15

标签: android canvas orientation qml qt-quick

我对QML很新(在Android上),请原谅我,如果这是一件微不足道的事情。我正在尝试使用Canvas对象来绘制一些自定义图形等。但是我不能让它在改变屏幕方向时表现得很好。如果我以纵向方向启动我的应用程序,它看起来不错,直到我切换到横向。如果我开始它的风景也一样。一切都好,直到我去画像。我该如何解决这个问题?这是一个简单的测试,我遇到了麻烦:

import QtQuick 2.2
import QtQuick.Window 2.1

Window {
    visible: true
    visibility: Window.FullScreen

    Rectangle {
        anchors.fill: parent
        color: "red"

        Canvas {
            anchors.fill: parent

            onPaint: {
                var ctx = getContext("2d")

                ctx.fillStyle = "blue"
                ctx.fillRect(0, 0, width, height)

            }
        }
    }
}

这是发生了什么。如果我启动上面的应用程序肖像,它会在屏幕上填充红色背景矩形和顶部的蓝色画布(我实际上可以看到它绘制两者)。当我走向风景时,这就是我最终的结果。

Portrait to landscape

画布不再填满整个屏幕。它似乎现在是一个完美的正方形,并且右侧剪掉(它没有拉伸。如果有更多内容,你会看到这个)。如果我开始拍摄并拍摄肖像,也会发生类似的事情:

enter image description here

2 个答案:

答案 0 :(得分:1)

回答我自己的问题作为可能的解决方案之一。看起来我的原始代码中的“anchors.fill:parent”行默认情况下不会更新相应级别中的width和height属性。以下代码似乎解决了这个问题:

import QtQuick 2.2
import QtQuick.Window 2.1

Window {
    id: root
    width: Screen.width
    height: Screen.height
    visible: true
    visibility: Window.FullScreen


    Rectangle {
        anchors.fill: parent
        width: parent.width
        height: parent.height
        color: "red"

        Canvas {
            anchors.fill: parent
            width: parent.width
            height: parent.height

            onPaint: {
                var ctx = getContext("2d")

                ctx.fillStyle = "blue"
                ctx.fillRect(0, 0, width, height)

            }
        }
    }
}

答案 1 :(得分:1)

我实际上对我之前的答案不太确定了。可能只是幸运的发生率。我想我找到了这种行为的真正原因。如果我部署应用程序以便它在我的手机上使用Ministro服务,那么我将得到这种错误的行为。但是,如果我将Qt从我的构建机器捆绑到包中,一切正常。使用相同的项目和相同的源文件测试两次......我的手机上有Ministro 9.6.8,机器上有最新的官方Qt。