使用 go-qml 从 QML 获取用户输入

我尝试使用 package.json 从 qml 获取用户输入gopkg.in/qml.v1。从 Go 设置值是成功的。但我无法取回更改后的值。例如,我将名称从 go code设置为 qml。用户更改文本字段并按下Button 后,我读取用户输入并推回"Hello, " + ctrl.Name


这是示例:


main.go


package main


import (

    "fmt"

    "gopkg.in/qml.v1"

    "os"

)


func main() {

    if err := qml.Run(run); err != nil {

        fmt.Fprintf(os.Stderr, "error: %v\n", err)

        os.Exit(1)

    }

}


func run() error {

    engine := qml.NewEngine()


    component, err := engine.LoadFile("main.qml")

    if err != nil {

        return err

    }


    context := engine.Context()

    context.SetVar("ctrl", &Control{Name: "Enter your name"})


    window := component.CreateWindow(nil)


    window.Show()

    window.Wait()


    return nil

}


type Control struct {

    Name    string

    Message string

}


func (ctrl *Control) Hello() {

    go func() {

        ctrl.Message = "Hello, " + ctrl.Name

        qml.Changed(ctrl, &ctrl.Message)

    }()

}

主文件


import QtQuick 2.0

import QtQuick.Controls 1.1


Rectangle {

    id: root

    color: "#ffffff"


    width: 320

    height: 320


    TextEdit {

        id: textEdit1

        x: 8

        y: 8

        width: 304

        height: 20

        text: ctrl.name

        font.pixelSize: 12

    }


    Button {

        id: button1

        x: 8

        y: 34

        width: 304

        height: 27

        text: qsTr("Button")

        onClicked: {

            ctrl.hello()

        }

    }


    Text {

        id: text1

        x: 8

        y: 67

        width: 304

        height: 23

        text: ctrl.message

        font.pixelSize: 12

    }

}

为了完成这项工作,我必须在Button onClicked() 中添加显式赋值,如下所示:


Button {

    id: button1

    x: 8

    y: 34

    width: 304

    height: 27

    text: qsTr("Button")

    onClicked: {

        ctrl.name = textEdit1.text

        ctrl.hello()

    }

}

我做错了什么?谢谢


慕仙森
浏览 303回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go