Como tornar uma tela QML visível?

2

Estou tentando desenhar algo na tela em um aplicativo de telefone do Ubuntu. Eu criei um novo "QML App com UI Simples (qmlproject)" no Ubuntu SDK, e substituí o conteúdo de Main.qml com o seguinte:

import QtQuick 2.0
import Ubuntu.Components 1.1

MainView {
    objectName: "mainView"

    applicationName: "canvasexample.cos64"

    useDeprecatedToolbar: false

    width: units.gu(50)
    height: units.gu(50)

    Page {
        title: i18n.tr("Canvas Example")

        Canvas {
            anchors {
                margins: units.gu(2)
                fill: parent
            }
            id: canvas
            width: 100
            height: 200
            onPaint: {
                console.log("on paint");
                var ctx = canvas.getContext('2d');
                ctx.save();
                ctx.clearRect(0, 0, canvas.width, canvas.height);
                ctx.beginPath();
                ctx.lineTo(75,70);
                ctx.closePath();
                ctx.stroke();
                ctx.restore();
            }

            onPainted: {
                console.log("painted");
            }

            MouseArea {
                id: buttonMouseArea
                anchors.fill: parent
                onClicked: {
                    console.log("clicked");
                    canvas.requestPaint();
                }
            }

            Component.onCompleted: {
                console.log("completed")
            }

            onScaleChanged: {
                console.log("scale changed")
            }

            onRotationChanged: {
                console.log("rotated");
            }
        }
    }
}

Não recebo nenhum erro, mas a tela não está visível, embora eu possa clicar nela, como mostra a saída do console:

Starting /usr/lib/x86_64-linux-gnu/qt5/bin/qmlscene...
qml: completed
qml: on paint
qml: painted
qml: clicked
qml: on paint
qml: painted
/usr/lib/x86_64-linux-gnu/qt5/bin/qmlscene exited with code 0

Veja como é o aplicativo em execução:

O que estou fazendo de errado?

    
por Cos64 18.04.2015 / 16:03

1 resposta

2
ctx.save();
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.beginPath();
ctx.moveTo(75,90);
ctx.lineTo(75,70);
ctx.closePath();
ctx.stroke();
ctx.restore();

editar

Se alguém estiver procurando por uma explicação acadêmica, o problema é que você precisa de dois pontos para traçar uma linha e, aparentemente, a biblioteca não lhe fornece um ponto de partida. Você deve configurá-lo com o método moveTo . Definir o ponto de partida com lineTo funciona, mas não está claramente documentado como tal (por isso, pode e vai quebrar).

    
por Velkan 18.04.2015 / 16:47