Go Qt5 建立空白視窗、視窗居中及關閉視窗事件

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

Go Qt5 建立空白視窗、視窗居中及關閉視窗事件

關閉視窗按鈕

func closeWindow(app *widgets.QMainWindow) {
	// 建立按鈕
	btn := widgets.NewQPushButton2("關閉視窗", app)
	// 設定按鈕大小
	btn.Resize(btn.SizeHint())
	// 移動按鈕位置
	btn.Move2(100, 100)
	btn.SetToolTip("這是一個 <b>QPushButton</b> 控制元件")
	// 按鈕點選事件
	btn.ConnectClicked(func(bool) {
		app.Close()
	})
}

控制視窗顯示在螢幕中心的方法

// 控制視窗顯示在螢幕中心的方法
func center(app *widgets.QMainWindow) {
	// 獲得視窗
	qr := app.FrameGeometry()
	//  獲得螢幕中心點
	cp := widgets.NewQDesktopWidget().AvailableGeometry2(app).Center()
	// 顯示到螢幕中心
	qr.MoveCenter(cp)
	app.Move(qr.TopLeft())
}

關閉視窗前處理事件

func CloseWindowEvent(event *gui.QCloseEvent){
	reply := widgets.QMessageBox_Question(nil, "提示訊息", "確定關閉視窗嗎?", widgets.QMessageBox__Yes|widgets.QMessageBox__No, widgets.QMessageBox__Yes)
		if reply == widgets.QMessageBox__Yes {
			event.Accept()
		} else {
			event.Ignore()
		}
}

完整程式碼

/*-------------------------------------------------------------------
| Project   : goland
| Author    : 今夕何夕
| QQ/Email  : 184566608<qingyueheji@qq.com>
| Time      : 2020-10-07 14:17
| Describe  : main
+------------------------------------------------------------------*/

package main

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


// 關閉視窗
func closeWindow(app *widgets.QMainWindow) {
	// 建立按鈕
	btn := widgets.NewQPushButton2("關閉視窗", app)
	// 設定按鈕大小
	btn.Resize(btn.SizeHint())
	// 移動按鈕位置
	btn.Move2(100, 100)
	btn.SetToolTip("This is a <b>QPushButton</b> widget")
	// 按鈕點選事件
	btn.ConnectClicked(func(bool) {
		app.Close()
	})
}

// 控制視窗顯示在螢幕中心的方法
func center(app *widgets.QMainWindow) {
	// 獲得視窗
	qr := app.FrameGeometry()
	//  獲得螢幕中心點
	cp := widgets.NewQDesktopWidget().AvailableGeometry2(app).Center()
	// 顯示到螢幕中心
	qr.MoveCenter(cp)
	app.Move(qr.TopLeft())
}

// 關閉視窗前處理事件
func CloseWindowEvent(event *gui.QCloseEvent){
	reply := widgets.QMessageBox_Question(nil, "提示訊息", "確定關閉視窗嗎?", widgets.QMessageBox__Yes|widgets.QMessageBox__No, widgets.QMessageBox__Yes)
	if reply == widgets.QMessageBox__Yes {
		event.Accept()
	} else {
		event.Ignore()
	}
}

// 初始化視窗
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"))

	// 關閉視窗
	closeWindow(app)

	// 更改視窗關閉預設事件
	app.ConnectCloseEvent(CloseWindowEvent)

	return app
}

func main() {
	// 建立一個應用程式物件
	// sys.argv引數是一個列表,從命令列輸入引數
	widgets.NewQApplication(len(os.Args), os.Args)

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

	// 視窗居中
	center(app)

	// 顯示元件
	app.Show()

	// 確保應用程式乾淨的退出
	widgets.QApplication_Exec()
}

預覽

在這裡插入圖片描述
在這裡插入圖片描述

相關文章