【问题标题】:QML Canvas on Android, Orientation IssueAndroid 上的 QML Canvas,方向问题
【发布时间】:2014-11-07 21:26:53
【问题描述】:

我对 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)

            }
        }
    }
}

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

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

【问题讨论】:

  • 你没有提到实际出了什么问题。如果您发布屏幕截图或描述问题,我们或许能够在无法访问 Android 设备的情况下查明您的问题。
  • 对不起。我编辑了这个问题,并添加了一些关于正在发生的事情的插图。
  • 谢谢。您使用的是哪个 Qt 版本?
  • Android 4.1.2 上的 Qt 5.3
  • 快速检查可能是添加关于画布宽度和高度变化的绘画请求(也显示带有文本元素的绘画请求,或登录更改)

标签: android canvas orientation qml qt-quick


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    回答我自己的问题作为可能的解决方案之一。看起来我原始代码中的“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)
    
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      • 2018-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多