Ich versuche, ein Formular zu aktualisieren ein WebView
in QML, aber ich habe Probleme mit der Aktualisierung der Ansicht und Text mit GoLang.Qt GUI Update-Elemente nicht mit Golang
Ich habe ähnliche Beiträge wie this one und this one angesehen, aber es ist immer noch nicht klar.
Wie Sie unten sehen können, versuche ich die WebView
zu aktualisieren, um die angezeigte Seite und das Textelement zu ändern, so dass ich um meiner selbst willen sehen kann, was gespeichert wird, wenn ich den Knopf drücke. Die GUI ändert sich jedoch nicht.
Was ich bisher habe, ist dies:
package main
import (
"time"
"math/rand"
"fmt"
"os"
"gopkg.in/qml.v1"
)
type Control struct {
Root qml.Object
Message string
}
func (ctrl *Control) Savetf1contents(text qml.Object) {
fmt.Println("in Savetf1contents():")
fmt.Println("text:", text.String("text"))
}
func (ctrl *Control) Loadtf1contents(text qml.Object) {
fmt.Println("in Loadtf1contents():")
fmt.Println("text:", text.String("text"))
go func() {
ctrl.Message = "loaded from tf1..."
qml.Changed(ctrl, &ctrl.Message)
}()
}
func main() {
if err := qml.Run(run); err != nil {
fmt.Fprintf(os.Stderr, "error: %v\n", err)
os.Exit(1)
}
}
func run() error {
// qml.RegisterTypes("GoExtensions", 1, 0, []qml.TypeSpec{{
// Init: func(r *GoRect, obj qml.Object) { r.Object = obj },
// }})
engine := qml.NewEngine()
component, err := engine.LoadFile("helloworld.qml")
if err != nil {
return err
}
ctrl := Control{Message: "http://google.co.uk"}
context := engine.Context()
context.SetVar("ctrl", &ctrl)
window := component.CreateWindow(nil)
ctrl.Root = window.Root()
rand.Seed(time.Now().Unix())
window.Show()
window.Wait()
return nil
}
und die QML-Datei:
import QtQuick 2.2
import QtQuick.Controls 1.1
import QtQuick.Window 2.0
import QtWebKit 3.0
ApplicationWindow {
//property alias form: ctrl.message
title: qsTr("Dashboard")
width: 640
height: 480
menuBar: MenuBar {
Menu {
title: qsTr("File")
MenuItem {
text: qsTr("Exit")
onTriggered: Qt.quit();
}
}
}
Grid {
columns: 3
spacing: 2
Text {
width: 335
// text: qsTr("Dashboard")
text: qsTr(ctrl.message)
}
Rectangle{
width: 200
height: 30
radius: 3
color: "#fff"
TextInput {
id: form
anchors.left: parent.right
anchors.top: parent.top
anchors.leftMargin: -195
anchors.topMargin: 5
text: qsTr("")
focus: true
width: 200
}
}
Button {
text: qsTr("Search User")
onClicked: {
ctrl.savetf1contents(form)
}
}
}
Grid {
columns: 1
spacing: 2
anchors.top: parent.top
anchors.topMargin: 35
id: text
WebView {
id: frame
url: ctrl.message
width: 640
height: 300
smooth: false
}
}
}