Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android上的QML画布,定向问题_Android_Canvas_Orientation_Qml_Qt Quick - Fatal编程技术网

Android上的QML画布,定向问题

Android上的QML画布,定向问题,android,canvas,orientation,qml,qt-quick,Android,Canvas,Orientation,Qml,Qt Quick,我对QML(安卓系统上)相当陌生,所以如果这是一件小事,请原谅我。我正在尝试使用Canvas对象绘制一些自定义图形等。但是,我无法使它在更改屏幕方向时表现良好。如果我以纵向启动我的应用程序,在切换到横向之前,它看起来还可以。如果我开始的话也会发生同样的事情。在我去之前一切都好。如何修复此行为?下面是一个我遇到麻烦的简单测试: import QtQuick 2.2 import QtQuick.Window 2.1 Window { visible: true visibilit

我对QML(安卓系统上)相当陌生,所以如果这是一件小事,请原谅我。我正在尝试使用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)

            }
        }
    }
}
下面是发生的情况。如果我启动上面的应用程序肖像,它会在屏幕上填充红色背景矩形和蓝色画布(我可以看到它同时绘制这两个)。当我去看风景时,这就是我的结局

画布不再填充整个屏幕。它现在看起来是一个完美的正方形,并剪掉了右边(它没有拉伸。如果有更多内容,你会看到这一点)。如果我开始横向和纵向,也会发生类似的事情:


回答我自己的问题是可能的解决方案之一。默认情况下,原始代码中的“anchors.fill:parent”行不会更新相应级别中的宽度和高度属性。以下代码似乎可以解决此问题:

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)

            }
        }
    }
}

事实上,我对我以前的答案已经不太确定了。可能只是运气好。我想我找到了这种行为的真正原因。如果我部署应用程序,让它在我的手机上使用Ministro服务,那么我就会出现这种错误行为。但是,如果我将Qt从构建机器捆绑到包中,一切都会正常工作。使用相同的项目和相同的源文件测试了两次。。。我的手机上有Ministro 9.6.8,我的机器上有最新的官方Qt。

你没有提到到底出了什么问题。如果您发布屏幕截图或描述问题,我们可能可以在不访问Android设备的情况下查明您的问题。对不起。我编辑了这个问题,并添加了一些关于发生了什么的插图。谢谢。您使用的是哪个Qt版本?Android 4.1.2a上的Qt 5.3 quick check可以添加画布宽度和高度变化的绘制请求(也可以显示带有文本元素的绘制请求,或者也可以记录变化)