golang跨平台Qt GUI开发绑定插件库qt的使用

Golang跨平台Qt GUI开发绑定插件库qt的使用

介绍

Qt是一个免费开源的widget工具包,用于创建图形用户界面以及跨平台应用程序,可以在各种软件和硬件平台上运行,而底层代码库几乎不需要修改。

Go(又称Golang)是Google设计的一种编程语言。

therecipe/qt允许你完全用Go编写Qt应用程序,同时还支持JavaScript/TypeScript、Dart/Flutter、Haxe和Swift等语言绑定。

除了提供的语言绑定外,therecipe/qt还大大简化了Qt应用程序在各种软件和硬件平台上的部署。

在编写本文时,几乎所有Qt函数和类都可以访问,你应该能够找到构建功能齐全的Qt应用程序所需的一切。

安装

以下说明假设你已经安装了Go和Git

(实验性)无cgo版本(如果你是新手并想测试绑定,请先尝试这个)

Windows

go get -ldflags="-w" github.com/therecipe/examples/basic/widgets && for /f %v in ('go env GOPATH') do %v\bin\widgets.exe

macOS/Linux

go get -ldflags="-w" github.com/therecipe/examples/basic/widgets && $(go env GOPATH)/bin/widgets

默认版本

Windows

set GO111MODULE=off
go get -v github.com/therecipe/qt/cmd/... && for /f %v in ('go env GOPATH') do %v\bin\qtsetup test && %v\bin\qtsetup -test=false

macOS

export GO111MODULE=off; xcode-select --install; go get -v github.com/therecipe/qt/cmd/... && $(go env GOPATH)/bin/qtsetup test && $(go env GOPATH)/bin/qtsetup -test=false

Linux

export GO111MODULE=off; go get -v github.com/therecipe/qt/cmd/... && $(go env GOPATH)/bin/qtsetup test && $(go env GOPATH)/bin/qtsetup -test=false

示例代码

下面是一个简单的Go Qt应用程序示例:

package main

import (
	"os"

	"github.com/therecipe/qt/widgets"
)

func main() {
	// 创建一个应用程序
	app := widgets.NewQApplication(len(os.Args), os.Args)

	// 创建一个主窗口
	window := widgets.NewQMainWindow(nil, 0)
	window.SetWindowTitle("Qt Go Example")
	window.SetMinimumSize2(400, 300)

	// 创建一个中央widget
	centralWidget := widgets.NewQWidget(nil, 0)
	window.SetCentralWidget(centralWidget)

	// 创建一个垂直布局
	layout := widgets.NewQVBoxLayout2(centralWidget)

	// 创建一个按钮
	button := widgets.NewQPushButton2("Click Me", nil)
	button.ConnectClicked(func(bool) {
		widgets.QMessageBox_Information(nil, "Info", "Button Clicked!", widgets.QMessageBox__Ok, widgets.QMessageBox__Ok)
	})

	// 创建一个标签
	label := widgets.NewQLabel2("Hello Qt with Go!", nil, 0)

	// 将控件添加到布局中
	layout.AddWidget(label, 0, 0)
	layout.AddWidget(button, 0, 0)

	// 显示窗口
	window.Show()

	// 运行应用程序
	app.Exec()
}

部署目标

目标 架构 链接方式 Docker部署 主机操作系统
Windows 32 / 64 动态/静态 任意
macOS 64 动态 任意
Linux arm / arm64 / 64 动态/静态/系统 任意
Android (+Wear) arm / arm64 动态 任意
Android-Emulator (+Wear) 32 动态 任意
SailfishOS arm 系统 任意
SailfishOS-Emulator 32 系统 任意
Raspberry Pi (1/2/3) arm 动态/系统 任意
Ubuntu Touch arm / 64 系统 任意
JavaScript 32 静态 任意
WebAssembly 32 静态 任意
iOS arm64 静态 macOS
iOS-Simulator 64 静态 macOS
AsteroidOS arm 系统 Linux
FreeBSD 32 / 64 系统 FreeBSD

许可证

本软件包根据LGPLv3发布。

Qt本身根据多种许可证授权和提供。


更多关于golang跨平台Qt GUI开发绑定插件库qt的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang跨平台Qt GUI开发绑定插件库qt的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Golang 跨平台 Qt GUI 开发指南

Qt 是一个强大的跨平台 GUI 框架,而 Go 是一种高效的编程语言。虽然 Go 本身没有原生的 GUI 库,但我们可以通过绑定 Qt 来实现跨平台的 GUI 开发。

常用的 Go Qt 绑定库

目前主要有两个流行的 Go Qt 绑定库:

  1. therecipe/qt - 功能最全面的 Qt 绑定
  2. go-qml/qml - 专注于 QML 的绑定

下面我将重点介绍 therecipe/qt 的使用方法。

therecipe/qt 安装与配置

1. 安装前提条件

  • 安装 Go (1.13+ 推荐)
  • 安装 Qt (5.13+ 推荐)
    • 确保 qmake 在 PATH 中
    • 安装 Qt 开发工具包

2. 安装 therecipe/qt

go get -v github.com/therecipe/qt/cmd/...

3. 设置环境变量

# Windows
set QT_DIR=C:\Qt\5.15.2\mingw81_64

# macOS/Linux
export QT_DIR=/path/to/Qt/5.15.2/clang_64

4. 安装 Qt 工具

$(go env GOPATH)/bin/qtsetup

基本示例代码

下面是一个简单的窗口应用程序示例:

package main

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

func main() {
	// 创建应用程序
	app := widgets.NewQApplication(len(os.Args), os.Args)

	// 创建主窗口
	window := widgets.NewQMainWindow(nil, 0)
	window.SetWindowTitle("Go Qt 示例")
	window.SetMinimumSize2(400, 300)

	// 创建中央部件
	centralWidget := widgets.NewQWidget(nil, 0)
	window.SetCentralWidget(centralWidget)

	// 创建布局
	layout := widgets.NewQVBoxLayout2(centralWidget)

	// 创建标签
	label := widgets.NewQLabel2("Hello, Qt from Go!", nil, 0)
	label.SetAlignment(gui.Qt__AlignCenter)
	layout.AddWidget(label, 0, gui.Qt__AlignCenter)

	// 创建按钮
	button := widgets.NewQPushButton2("点击我", nil)
	button.ConnectClicked(func(checked bool) {
		widgets.QMessageBox_Information(nil, "信息", "按钮被点击了!", 
			widgets.QMessageBox__Ok, widgets.QMessageBox__Ok)
	})
	layout.AddWidget(button, 0, gui.Qt__AlignCenter)

	// 显示窗口
	window.Show()

	// 运行应用程序
	app.Exec()
}

构建与运行

1. 构建应用程序

# 使用 qtdeploy 工具构建
$(go env GOPATH)/bin/qtdeploy build desktop ./path/to/your/project

2. 运行应用程序

构建完成后,在 deploy 目录中会生成可执行文件。

跨平台支持

therecipe/qt 支持以下平台:

  • Windows (MinGW/MSVC)
  • macOS
  • Linux
  • Android (实验性)
  • iOS (实验性)

高级功能示例

1. 使用 QML

package main

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

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

	// 创建 QML 视图
	view := quick.NewQQuickView(nil)
	view.SetSource(NewQUrl("qrc:/main.qml"))
	view.SetResizeMode(quick.QQuickView__SizeRootObjectToView)
	view.Show()

	app.Exec()
}

2. 信号与槽连接

button.ConnectClicked(func(checked bool) {
    // 按钮点击处理逻辑
})

// 自定义信号
type CustomWidget struct {
    *widgets.QWidget
    _ func() `signal:"customSignal"`
}

// 发射信号
widget := NewCustomWidget(nil)
widget.ConnectCustomSignal(func() {
    println("自定义信号被触发")
})
widget.EmitCustomSignal()

注意事项

  1. 性能考虑:Go 和 Qt 之间的调用会有一定的性能开销,对于性能敏感的应用需要谨慎。

  2. 内存管理:Go 的垃圾回收和 Qt 的内存管理机制不同,需要注意对象生命周期。

  3. 部署大小:由于需要包含 Qt 库,最终的可执行文件会比较大。

  4. 版本兼容性:确保 Go 和 Qt 的版本兼容性。

总结

使用 therecipe/qt 绑定库可以让你在 Go 中充分利用 Qt 的强大功能,开发跨平台的 GUI 应用程序。虽然有一些限制和性能考虑,但对于大多数应用场景来说,这是一个非常可行的解决方案。

回到顶部