我试图使用gopkg.in/qml.v1包从qml获取用户输入。
通过Go设置值成功。但是我无法找回更改的值。
例如,我将名称从go代码设置为qml。用户更改文本字段并按下按钮后,我读取了用户输入并推回"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)
    }()
}

main.qml
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()
    }
}

我做错了什么?谢谢

最佳答案

您必须使用绑定(bind)来更新ctrl.name,否则它将保持不变:

TextEdit {
    id: textEdit1
    x: 8
    y: 8
    width: 304
    height: 20
    text: ctrl.name
    font.pixelSize: 12
}
Binding { target: ctrl; property: "name"; value: textEdit1.text }

引用:http://qt-project.org/doc/qt-5/qml-qtqml-binding.html

08-03 12:55
查看更多