首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新QML画布

更新QML画布
EN

Stack Overflow用户
提问于 2017-12-18 05:39:50
回答 1查看 2.1K关注 0票数 2

我是一个QML / Javascript菜鸟,希望得到一些帮助。

我想在一个白色的QML画布元素上插入一些点(用小黑圈表示),然后在它们上运行一个算法(比如通过外部几何库找到凸包)。

这是我的QML代码。

代码语言:javascript
复制
import QtQuick 2.5
import QtQuick.Window 2.2

Window{
    id: root
    width: 640 
    height: 480 
    visible: true 

    Canvas {

        width:  1000
        height: 1000

        onPaint: {
            var context = getContext("2d");

        }

        MouseArea {
            id: mymouse
            anchors.fill: parent

            property var arrpoints : []
            onClicked: {

                // Record mouse-position
                arrpoints = arrpoints.concat([mouseX, mouseY])
                console.log(arrpoints)

            } 
        }

    } 
}

到目前为止,上面的代码打开了一个窗口,上面有一个QML画布,可以跟踪画布上的位置(通过数组arrpoints),并将点击点的数组输出到控制台。

但是现在,每次arrpoints发生变化,我如何“告诉”QML在那个点上立即画一个小黑圈呢?

我本以为QML的onPaint部分会立即触发新状态的呈现,但似乎在用户开始与其交互之前,该部分仅用于画布上的初始绘制。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-18 05:56:34

您必须调用画布requestPaint()函数来强制绘制。适当地保存职位数据也是明智的:{"x": x_value, "y": y_value}

代码语言:javascript
复制
import QtQuick 2.5
import QtQuick.Window 2.2

Window{
    id: root
    width: 640 
    height: 480 
    visible: true 

    Canvas {
        id: canvas

        width:  1000
        height: 1000

        onPaint: {
            var context = getContext("2d")
            context.strokeStyle = Qt.rgba(0, 0, 0, 1)
            context.lineWidth = 1
            for(var i=0; i < mymouse.arrpoints.length; i++){
                var point = mymouse.arrpoints[i]
                context.ellipse(point["x"]-5, point["y"]-5, 10, 10)
            }
            context.stroke()
        }

        MouseArea {
            id: mymouse
            anchors.fill: parent
            property var arrpoints : []
            onClicked: {
                arrpoints.push({"x": mouseX, "y": mouseY})
                canvas.requestPaint()
            } 
        }
    } 
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47859732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档