案例说明
-
有时需要知道信号是由哪个控件发出的。对此Qt5提供了sender()方法。
-
我们创建了两个按钮。
-
我们通过调用sender()方法来判断信号源, 并将其名称显示在窗体的状态栏中。
-
这是一个比较失败的案例,并没有实现变通;sender是手动进行指定判断的
。
demo.go
package main
import (
"github.com/therecipe/qt/core"
"github.com/therecipe/qt/gui"
"github.com/therecipe/qt/widgets"
"os"
)
/*
有时需要知道信号是由哪个控件发出的。对此Qt5提供了sender()方法。
我们创建了两个按钮。
我们通过调用sender()方法来判断信号源, 并将其名称显示在窗体的状态栏中。
*/
func InitUi() *widgets.QMainWindow {
// 创建窗口
app := widgets.NewQMainWindow(nil, 0)
// 设置窗口的标题
app.SetWindowTitle("Qt 教程")
// 设置窗口的位置和大小
app.SetGeometry2(300, 300, 300, 220)
// 设置窗口的图标,引用当前目录下的web.png图片
app.SetWindowIcon(gui.NewQIcon5("images/app.ico"))
// 布局窗口组件载体
widget := widgets.NewQWidget(app, core.Qt__Widget)
//widget.SetGeometry(core.NewQRect4(300, 300, 300, 220))
widget.SetGeometry2(0, 0, 300, 220)
app.SetCentralWidget(widget)
btn1 := widgets.NewQPushButton2("Button1", widget)
btn2 := widgets.NewQPushButton2("Button2", widget)
btn1.Move2(30, 50)
btn2.Move2(150, 50)
buttonClicked := func (checked bool) {
sender1 := btn1.Sender().Pointer()
sender2 := btn2.Sender().Pointer()
//fmt.Println(reflect.TypeOf(sender1), sender1, "Button1")
//fmt.Println(reflect.TypeOf(sender2), sender2, "Button2")
msg := ""
if sender1 != nil{
msg = "Button1"
} else if sender2 != nil {
msg = "Button2"
} else {
msg = "err"
}
app.StatusBar().ShowMessage(msg + " was pressed", 0)
}
btn1.ConnectClicked(buttonClicked)
btn2.ConnectClicked(buttonClicked)
return app
}
func main() {
// 创建一个应用程序对象
// sys.argv参数是一个列表,从命令行输入参数
widgets.NewQApplication(len(os.Args), os.Args)
// 初始化窗口
app := InitUi()
// 显示组件
app.Show()
// 确保应用程序干净的退出
widgets.QApplication_Exec()
}