2014-09-14 9 views
4

QML (안드로이드에서)이 상당히 새롭습니다. 이것이 사소한 일이라면 용서하세요. 캔버스 개체를 사용하여 일부 사용자 지정 그래프 등을 그리는 중입니다.하지만 화면 방향을 변경하면 제대로 작동하지 않습니다. 세로 방향으로 앱을 시작하면 가로로 전환 할 때까지 괜찮아 보입니다. 내가 그것을 시작하면 같은 일이 일어난다. 내가 갈 때까지 모든게 괜찮아. 어떻게이 문제를 해결할 수 있습니까? 다음은 문제가있는 간단한 테스트입니다.안드로이드에 QML 캔버스, 오리엔테이션 문제

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

+0

실제로 잘못되었다고 언급하지 않았습니다. 캡쳐 화면을 게시하거나 문제를 설명하면 Android 기기에 액세스하지 않고도 문제를 정확히 찾아 낼 수 있습니다. – Mitch

+0

죄송합니다. 나는 그 질문을 편집하고 무슨 일이 일어나고 있는지 몇 가지 삽화를 덧붙였다. – kbrown

+0

감사합니다. 어떤 Qt 버전을 사용하고 있습니까? – Mitch

답변

1

저는 이전의 대답에 대해서는 더 이상 확신 할 수 없습니다. 운 좋은 발병 이었을지도 모릅니다. 나는이 행동에 대한 진정한 이유를 발견했다고 생각한다. 내 전화에서 Ministro 서비스를 사용하도록 응용 프로그램을 배포하면이 버그가있는 동작이 발생합니다. 그러나 빌드 머신의 Qt를 패키지에 묶어두면 모든 것이 잘 동작합니다. 동일한 프로젝트 및 동일한 소스 파일로 두 번 테스트되었습니다 ... 내 전화기에는 Ministro 9.6.8이 있고 내 컴퓨터에는 최신 공식 Qt가 있습니다.

1

가능한 솔루션 중 하나로서 내 자신의 질문에 대답 : 나는 풍경을 시작하고 세로 가면 비슷한 일이 발생합니다. 내 원래 코드의 "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) 

      } 
     } 
    } 
}