Go-Qt5开发之信号槽例子(16)

事件和信号介绍

  • 在这一部分的qt5教程中,我们将探讨Qt5中的事件Event

事件 Event

- 所有的GUI程序都是事件驱动的。
- 事件主要由用户触发,但也可能有其他触发方式:
- 例如网络连接、window manager或定时器。
- 当我们调用QApplication的exec_()方法时会使程序进入主循环。
- 主循环会获取并分发事件。

在事件模型中,有三个参与者:

- 事件源:事件源是状态发生变化的对象,它会生成事件。
- 事件对象:事件(对象)封装了事件源中状态的变动。
- 事件接收者:事件接收者是要通知的对象。事件源对象将事件处理的工作交给事件接收者。

Qt5信号槽

  • Qt5有一个独特的signal&slot(信号槽)机制来处理事件。
  • 信号槽用于对象间的通信。
  • signal在某一特定事件发生时被触发,slot可以是任何callable对象。
  • 当signal触发时会调用与之相连的slot。

疑难

这一部分的signal和slot案例是比较缺失的,自定义信号还没有搞明白。

案例说明

这是一个使用信号槽的Qt5例子。
这个例子中展示了一个QtGui.QLCDNumber和QtGui.QSlider。lcd的值会随着滑块的拖动而改变。
在这里我们将滚动条的valueChanged信号连接到lcd的display插槽。
sender是发出信号的对象。receiver是接收信号的对象。
slot(插槽)是对信号做出反应的方法。

demo.go

package main

import (
	"github.com/therecipe/qt/core"
	"github.com/therecipe/qt/gui"
	"github.com/therecipe/qt/widgets"
	"os"
)

/*
这是一个使用信号槽的Qt5例子。

这个例子中展示了一个QtGui.QLCDNumber和QtGui.QSlider。lcd的值会随着滑块的拖动而改变。
在这里我们将滚动条的valueChanged信号连接到lcd的display插槽。
sender是发出信号的对象。receiver是接收信号的对象。
slot(插槽)是对信号做出反应的方法。

*/

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"))

	// 布局窗口组件
	layoutWidget := widgets.NewQWidget(app, core.Qt__Widget)
	//layoutWidget.SetGeometry(core.NewQRect4(300, 300, 300, 220))
	layoutWidget.SetGeometry2(0, 0, 300, 220)

	// 数字
	lcd := widgets.NewQLCDNumber(layoutWidget)
	// 滑块
	sld := widgets.NewQSlider2(core.Qt__Horizontal, layoutWidget)

	// 信号连接槽
	sld.ConnectValueChanged(func(value int) {
		lcd.Display2(value)
	})

	vbox := widgets.NewQVBoxLayout2(layoutWidget)
	vbox.AddWidget(lcd,0, 0)
	vbox.AddWidget(sld,0,0)

	return app
}

func main() {
	// 创建一个应用程序对象
	// sys.argv参数是一个列表,从命令行输入参数
	widgets.NewQApplication(len(os.Args), os.Args)

	// 初始化窗口
	app := InitUi()

	// 显示组件
	app.Show()

	// 确保应用程序干净的退出
	widgets.QApplication_Exec()
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值