GO QT5 水平垂直佈局

晴天雨露 - LOVFF發表於2020-10-07

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()
}

預覽

在這裡插入圖片描述

相關文章