I attempting to get user input from qml, using gopkg.in/qml.v1
package.
Setting up values from Go is successful. But I can't get back changed values.
For example, I set Name from go code to qml. After user change text field and push Button, I read user input and push back "Hello, " + ctrl.Name
This is example:
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
", 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
}
}
To make this work, I have to add explicit assignment in Button onClicked() like this:
Button {
id: button1
x: 8
y: 34
width: 304
height: 27
text: qsTr("Button")
onClicked: {
ctrl.name = textEdit1.text
ctrl.hello()
}
}
What I do wrong? Thank you