GO QT5 水平垂直布局

GO QT5 水平垂直布局

完整代码

/*-------------------------------------------------------------------
| Project   : Go QT5 学习
| Author    : 今夕何夕
| QQ/Email  : 184566608<qingyueheji@qq.com>
| Time      : 2020-10-07 15:59
| Describe  : 水平垂直布局
+------------------------------------------------------------------*/

package main

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

func InitUI() *widgets.QMainWindow {
    // NewQMainWindow 没有布局功能,这只是一个窗口
    app := widgets.NewQMainWindow(nil, 0)
    app.SetGeometry2(0, 0, 500, 400)

    // 注册一个控件挂 QMainWindow(app) 上 管理全局
    centralWidget := widgets.NewQWidget(app, core.Qt__Widget)

    // 注册一个布局控件并设置 centralWidget 的布局(水平布局)
    verticalLayout := widgets.NewQVBoxLayout2(centralWidget)
    // 控件的间距
    verticalLayout.SetSpacing(0)
    verticalLayout.SetContentsMargins(0, 0, 0, 0)

    // 注册一个 QWidget 控件 并挂载到 centralWidget
    topLayoutWidget := widgets.NewQWidget(centralWidget, core.Qt__Widget)
    topLayoutWidget.SetStyleSheet("background-color:red")
    //topLayoutWidget.SetGeometry2(0, 0, 300, 220)	// 设置控件位置及大小
    /////////////////////////////////////注释了的等于没注释的///////////////////////////////////////////////////////////
    topLayoutWidget.SetSizePolicy2(widgets.QSizePolicy__Preferred, widgets.QSizePolicy__Expanding)
    //// 设置控件填充
    //sizePolicy := widgets.NewQSizePolicy2(widgets.QSizePolicy__Preferred, widgets.QSizePolicy__Expanding, widgets.QSizePolicy__DefaultType)
    //// 设置水平
    //sizePolicy.SetHorizontalPolicy(0)
    //// 设置垂直
    //sizePolicy.SetVerticalStretch(0)
    //// 设置高
    //sizePolicy.SetHeightForWidth(topLayoutWidget.SizePolicy().HasHeightForWidth())
    //// 给控件设置填充
    //topLayoutWidget.SetSizePolicy(sizePolicy)
    ////////////////////////////////////////////////////////////////////////////////////////////////
    // 设置 verticalLayout 的子控件 并受父控件布局影响
    verticalLayout.AddWidget(topLayoutWidget, 0, 0)

    // 注册一个 QWidget 控件 并挂载到 centralWidget
    bottomLayoutwidget := widgets.NewQWidget(centralWidget, core.Qt__Widget)
    bottomLayoutwidget.SetStyleSheet("background-color:blue")
    // 设置 verticalLayout 的子控件 并受父控件布局影响
    verticalLayout.AddWidget(bottomLayoutwidget, 0, 0)

    // 注册一个布局控件并设置 topLayoutWidget 的布局(垂直布局)
    hbox := widgets.NewQHBoxLayout2(bottomLayoutwidget)

    // 注册一个伸缩因子
    spacerItem := widgets.NewQSpacerItem(40, 20, widgets.QSizePolicy__Expanding, widgets.QSizePolicy__Minimum)

    // 在 ok 之前添加一个伸缩因子
    hbox.AddItem(spacerItem)

    // 按钮 (ok)
    ok := widgets.NewQPushButton2("OK", bottomLayoutwidget)
    // 添加子控件
    hbox.AddWidget(ok, 0, 0)

    // 按钮 (cancel)
    cancel := widgets.NewQPushButton2("Cancel", bottomLayoutwidget)
    hbox.AddWidget(cancel, 0, 0)
    // 在 cancel 之后添加一个伸缩因子
    hbox.AddItem(spacerItem)

    // 设置 centralWidget 控件铺满窗口
    app.SetCentralWidget(centralWidget)
    return app
}

func main() {
    widgets.NewQApplication(len(os.Args), os.Args)

    app := InitUI()
    app.SetWindowIcon(gui.NewQIcon5("images/app.ico"))

    app.SetWindowTitle("水平垂直布局")

    // 获取窗口 取得屏幕中心坐标
    fg := app.FrameGeometry()
    wc:= widgets.NewQDesktopWidget().AvailableGeometry2(app).Center()
    fg.MoveCenter(wc)

    // 设置窗口移动位置
    app.Move(fg.TopLeft())

    app.Show()

    widgets.QApplication_Exec()
}

预览

posted @ 2020-10-07 13:31  晴天雨露  阅读(111)  评论(0)    收藏  举报