案例说明
-
一个进度条是一个显示任务进展的控件。
-
QProgressBar控件提供了一个水平或垂直Qt5工具包的进度条。
-
程序员可以设置进度条的最小和最大值。默认值是0到99。
-
这个例子显示一个水平的进度条和一个按钮,用户通过点击按钮开始和停止进度条
demo.go
package main
import (
"github.com/therecipe/qt/core"
"github.com/therecipe/qt/gui"
"github.com/therecipe/qt/widgets"
"os"
)
/*
一个进度条是一个显示任务进展的控件。
QProgressBar控件提供了一个水平或垂直PyQt5工具包的进度条。
程序员可以设置进度条的最小和最大值。默认值是0到99。
这个例子显示一个水平的进度条和一个按钮,用户通过点击按钮开始和停止进度条
*/
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)
// 状态栏
app.StatusBar()
// 进度条
pbar := widgets.NewQProgressBar(widget)
pbar.SetGeometry2(30, 40, 200, 25)
pbar.SetValue(0)
btn := widgets.NewQPushButton2("Start", widget)
btn.Move2(40, 80)
// 计数
step := 0
// 定时器,我们使用定时器timer来激活QProgressBar
//timer := core.NewQBasicTimer()
timer := core.NewQTimer(widget)
// 每个QObject及其子类都有一个timerEvent()事件处理器。
//我们要重新实现这个事件处理器来响应定时器事件。
timer.ConnectEvent(func(e *core.QEvent) bool {
if step >= 100 {
timer.Stop()
btn.SetText("Finished")
return true
} else {
step = step + 1
pbar.SetValue(step)
}
return false
})
// //方法中启动/停止定时器。
btn.ConnectClicked(func(checked bool) {
if timer.IsActive() {
timer.Stop()
btn.SetText("Start")
} else {
//我们调用start()方法启动一个计时器。这个方法有两个参数:超时和对象将接收的事件。
timer.Start(100)
btn.SetText("Stop")
}
})
return app
}
func main() {
// 创建一个应用程序对象
// sys.argv参数是一个列表,从命令行输入参数
widgets.NewQApplication(len(os.Args), os.Args)
// 初始化窗口
app := InitUi()
// 显示组件
app.Show()
// 确保应用程序干净的退出
widgets.QApplication_Exec()
}