我们使用 NewQHBoxLayout 和 NewQVBoxLayout,来分别创建横向布局和纵向布局。
在这个例子中,我们使用 NewQHBoxLayout 和 NewQVBoxLayout 并添加伸展因子,在窗口的右下角显示两个按钮。
package main
import (
"github.com/therecipe/qt/core"
"github.com/therecipe/qt/gui"
"github.com/therecipe/qt/widgets"
"os"
)
/*
我们使用 NewQHBoxLayout 和 NewQVBoxLayout,来分别创建横向布局和纵向布局。
在这个例子中,我们使用 NewQHBoxLayout 和 NewQVBoxLayout 并添加伸展因子,在窗口的右下角显示两个按钮。
*/
func InitUi() *widgets.QMainWindow {
// 创建窗口
app := widgets.NewQMainWindow(nil, core.Qt__Widget)
// 设置窗口的标题
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)
app.SetCentralWidget(layoutWidget)
okButton := widgets.NewQPushButton2("OK", layoutWidget)
cancelButton := widgets.NewQPushButton2("Cancel", layoutWidget)
// 水平布局
// 我们创建一个水平布局和添加一个伸展因子和两个按钮。
hbox := widgets.NewQHBoxLayout2(layoutWidget)
hbox.SetContentsMargins(0, 0, 0, 0)
// 两个按钮前的伸展增加了一个可伸缩的空间。这将推动他们靠右显示。
hbox.AddStretch(1)
// 为布局中添加控件,stretch(拉伸因子)只适用与QBoxLayout,widget和box会随着stretch的变大而增大;alignment指定对齐的方式
hbox.AddWidget(okButton, 0, 0)
hbox.AddWidget(cancelButton, 0, 0)
//hbox.Layout().AddWidget(okButton)
//hbox.Layout().AddWidget(cancelButton)
//垂直布局
// 创建一个垂直布局,并添加伸展因子,让水平布局显示在窗口底部
vbox := widgets.NewQVBoxLayout2(layoutWidget)
vbox.SetContentsMargins(0, 0, 0, 0)
vbox.AddStretch(1)
vbox.AddLayout(hbox, 0)
//app.SetLayout(vbox)
return app
}
func main() {
// 创建一个应用程序对象
// sys.argv参数是一个列表,从命令行输入参数
widgets.NewQApplication(len(os.Args), os.Args)
// 初始化窗口
app := InitUi()
// 显示组件
app.Show()
// 确保应用程序干净的退出
widgets.QApplication_Exec()
}