qt gui更新元素不适用于Golang

qt gui更新元素不适用于Golang,qt,user-interface,go,signals,qml,Qt,User Interface,Go,Signals,Qml,我正在尝试在QML中进行表单更新aWebView,但是使用GoLang更新视图和文本时遇到问题 我看过类似的帖子,如和,但仍然不清楚 正如您在下面看到的,我正在尝试更新WebView以更改显示的页面和文本元素,这样我就可以在按下按钮时查看存储的内容。然而,GUI并没有改变 到目前为止,我得到的是: package main import ( "time" "math/rand" "fmt" "os" "gopkg.in/qml.v1" ) type C

我正在尝试在QML中进行表单更新a
WebView
,但是使用GoLang更新视图和文本时遇到问题

我看过类似的帖子,如和,但仍然不清楚

正如您在下面看到的,我正在尝试更新
WebView
以更改显示的页面和文本元素,这样我就可以在按下按钮时查看存储的内容。然而,GUI并没有改变

到目前为止,我得到的是:

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
}
以及QML文件:

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
         }

    }

}

此示例应更改文本元素,并操纵webview以根据用户输入加载新页面:

func (ctrl *Control) Savetf1contents(text qml.Object) 
{
    fmt.Println("in Savetf1contents():")
    fmt.Println("text:", text.String("text"))
    // Change the message & update
    ctrl.Message = text.String("text")
    qml.Changed(ctrl, &ctrl.Message)
    // Find the webview element
    webframe := ctrl.Root.ObjectByName("tralalala")
    // Load new page!
    webframe.Set("url", text.String("text"))
}
要使其正常工作,必须为webview组件设置objectName属性:

WebView 
{
    objectName: "tralalala"
    id: frame
    url: ctrl.message
    width: 640
    height: 300
    smooth: false
}
如果您的意图是操纵webview的内容(用于填写搜索表单),则使用是不可能的。但是,您始终可以操纵url以包含搜索词