qt gui更新元素不适用于Golang
我正在尝试在QML中进行表单更新aqt 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
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以包含搜索词