Go-Qt5开发之移动鼠标发出信号
案例介绍
demo.go
package main
import (
"errors"
"fmt"
"github.com/therecipe/qt"
"github.com/therecipe/qt/core"
"github.com/therecipe/qt/gui"
"github.com/therecipe/qt/widgets"
"os"
"unsafe"
)
type UIMainWindow struct {
CentralWidget *widgets.QWidget
Menubar *widgets.QMenuBar
Statusbar *widgets.QStatusBar
PushButton1 *widgets.QPushButton
PushButton2 *widgets.QPushButton
GoSignal GoSignal
}
type GoSignal struct {
core.QObject
a interface{}
}
func (g *GoSignal) ConnectGoSignal(a interface{}) {
if !qt.ExistsSignal(g.Pointer(), "goSignal") {
g.a = a
qt.ConnectSignal(g.Pointer(), "goSignal", unsafe.Pointer(&a))
}
}
func (g *GoSignal) Emit() (err error) {
err = nil
if signal := qt.LendSignal(g.Pointer(), "goSignal"); signal != nil {
func() {
g.a.(func())()
}()
qt.ConnectSignal(g.Pointer(), "goSignal", unsafe.Pointer(&g.a))
} else {
err = errors.New("not ExistsSignal -> goSignal")
}
return err
}
func (g *GoSignal) Emit2(args interface{}) (err error) {
err = nil
if signal := qt.LendSignal(g.Pointer(), "goSignal"); signal != nil {
func() {
g.a.(func(args interface{}))(args)
}()
qt.ConnectSignal(g.Pointer(), "goSignal", unsafe.Pointer(&g.a))
} else {
err = errors.New("not ExistsSignal -> goSignal")
}
return err
}
func (w *UIMainWindow) SetupUI(MainWindow *widgets.QMainWindow) {
MainWindow.SetObjectName("MainWindow")
MainWindow.SetWindowTitle("Qt 教程")
MainWindow.SetGeometry2(300, 300, 300, 220)
MainWindow.SetWindowIcon(gui.NewQIcon5("images/app.ico"))
w.Center(MainWindow)
w.CentralWidget = widgets.NewQWidget(MainWindow, core.Qt__Widget)
w.CentralWidget.SetGeometry2(0, 0, 300, 220)
MainWindow.SetCentralWidget(w.CentralWidget)
w.Statusbar = widgets.NewQStatusBar(MainWindow)
w.Statusbar.SetObjectName("Statusbar")
MainWindow.SetStatusBar(w.Statusbar)
w.GoSignal = GoSignal{}
w.GoSignal.ConnectGoSignal(w.getData)
MainWindow.ConnectMoveEvent(w.MoveEvent)
}
func (w *UIMainWindow) MoveEvent(event *gui.QMoveEvent) {
_ = w.GoSignal.Emit2([]interface{}{event.Pos().X(), event.Pos().Y()})
}
func (w *UIMainWindow) getData(args interface{}) {
fmt.Println("getData: ", args)
}
func (w *UIMainWindow) Center(MainWindow *widgets.QMainWindow) {
qr := MainWindow.FrameGeometry()
cp := widgets.NewQDesktopWidget().AvailableGeometry2(MainWindow).Center()
qr.MoveCenter(cp)
MainWindow.Move(qr.TopLeft())
}
func (w *UIMainWindow) RetranslateUi(MainWindow *widgets.QMainWindow) {
_translate := core.QCoreApplication_Translate
MainWindow.SetWindowTitle(_translate("MainWindow", "QT 教程", "", -1))
}
func main() {
widgets.NewQApplication(len(os.Args), os.Args)
MainWindow := widgets.NewQMainWindow(nil, 0)
uiMain := UIMainWindow{}
uiMain.SetupUI(MainWindow)
uiMain.RetranslateUi(MainWindow)
MainWindow.Show()
widgets.QApplication_Exec()
}