当前位置: 首页 > article >正文

使用Go语言开发Qt界面

Go 的 UI 库

Go 语言本身是没有 UI 库的,不过有许多第三方的库支持将 Go 语言绑定到其他 UI 库,比如 Qt、GTK。参考地址

环境搭建

非 windows 或者需要参数说明的可以参考官方的wiki、windows 安装

Qt 安装

下载你需要的版本,下载地址。

therecipe/qt 安装

终端执行下面的命令:

# Go的环境变量配置,配置过一次就不用在设置了
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn# 下载therecipe/qt库
go get -v -tags=no_env github.com/therecipe/qt/cmd/...

执行 qtsetup

下载好库后会在%GOPATH%/bin目录下出现几个帮助执行绑定工作的可执行文件
在这里插入图片描述
现在还需要根据你本地的 Qt 再配置下编译环境,就是执行上面目录中的 qtsetup,但是直接执行是会有问题的:
在这里插入图片描述
Go-Use-Qt-2020-04-19-20-23-26
需要配置几个环境变量,qtsetup只需要执行一次。如果你有多个环境要切换,需要注意和编译时的环境变量保持一致,可以用 bat 临时设置下环境变量方便切换,下面就是 bat 的内容:

SET PATH=%PATH%;%GOPATH%\bin;REM 配置Qt目录和Qt版本
SET QT_DIR=C:\Qt\Qt5.12.5
SET QT_VERSION_MAJOR=5.12.5REM 编译32位程序,前提是你的Qt有Mingw32套件
SET GOARCH=386REM 默认使用Mingw编译,使用MSVC编译的话开启下面的选项,qtsetup可以运行,但是后面qtdeploy会报cgo相关错误
REM SET QT_MSVC=true
REM SET PATH=%PATH%;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build;
REM call vcvarsall.bat amd64_x86REM 语言绑定安装,只需执行一次
qtsetup.exe

示例demo

创建一个 Go 项目目录

终端运行:

mkdir qtwidget && cd qtwidget
go mod init

main.go

在项目目录新建一个 main.go 文件,复制下面的内容:

package mainimport ("os""github.com/therecipe/qt/widgets"
)func main() {// needs to be called once before you can start using the QWidgetsapp := widgets.NewQApplication(len(os.Args), os.Args)// create a window// with a minimum size of 250*200// and sets the title to "Hello Widgets Example"window := widgets.NewQMainWindow(nil, 0)window.SetMinimumSize2(250, 200)window.SetWindowTitle("Hello Widgets Example")// create a regular widget// give it a QVBoxLayout// and make it the central widget of the windowwidget := widgets.NewQWidget(nil, 0)widget.SetLayout(widgets.NewQVBoxLayout())window.SetCentralWidget(widget)// create a line edit// with a custom placeholder text// and add it to the central widgets layoutinput := widgets.NewQLineEdit(nil)input.SetPlaceholderText("Write something ...")widget.Layout().AddWidget(input)// create a button// connect the clicked signal// and add it to the central widgets layoutbutton := widgets.NewQPushButton2("and click me!", nil)button.ConnectClicked(func(bool) {widgets.QMessageBox_Information(nil, "OK", input.Text(), widgets.QMessageBox__Ok, widgets.QMessageBox__Ok)})widget.Layout().AddWidget(button)// make the window visiblewindow.Show()// start the main Qt event loop// and block until app.Exit() is called// or the window is closed by the userapp.Exec()
}

编译

编译就是执行 qtdeploy 命令,具体参数可以自己运行 qtdeploy -h 查看,这个终端文件也是在%GOPATH%/bin的,如果你的编译环境有多个也可以用 bat 配置下,与上面的类似,新建个 build.bat 拷贝下面的内容并运行:

SET PATH=%PATH%;%GOPATH%\bin;REM 配置Qt目录和Qt版本
SET QT_DIR=C:\Qt\Qt5.12.5
SET QT_VERSION_MAJOR=5.12.5REM 编译32位程序
SET GOARCH=386REM 默认使用Mingw编译,使用MSVC编译的话开启下面的选项,qtsetup可以运行,但是后面qtdeploy会报cgo相关错误
REM SET QT_MSVC=true
REM SET PATH=%PATH%;C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build;
REM call vcvarsall.bat amd64_x86REM 语言绑定安装,只需执行一次
REM qtsetup.exeREM 编译具体项目时运行
qtdeploy build desktop ./

生成的可执行文件在当前目录/deploy/windows,本体 exe 和相关的 dll 都在这个目录下

在这里插入图片描述
注:我使用 Mingw 编译成功,但是 MSVC 编译会有 cgo 的错误。

main.go:6:2: G:\Go\src\go_learn\qtwidget\vendor\github.com\therecipe\qt\widgets\minimal_cgo_windows_windows_386.go: invalid #cgo verb: #cgo MSCFLAGS: -nologo -Zc:wchar_t -FS -Zc:strictStrings -O2 -MD -W3 -w44456 -w44457 -w44458 -D_ALLOW_KEYWORD_MACROS -DUNICODE -D_UNICODE -DWIN32 -D_ENABLE_EXTENDED_ALIGNED_STORAGE -DQT_NO_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DNDEBUG

运行结果

demo 执行效果如下:

在这里插入图片描述

http://www.lryc.cn/news/2415320.html

相关文章:

  • Linux系统Kernel Panic定义
  • nginx服务器请求建立链接的过程
  • OFStar论坛漏洞利用 作者:saiy[F.S.T]
  • JSF in Action读书笔记(二)自定义UIComponent
  • 认识数字影片版本(CAM、TS、TC、DVD、HD、BD、TVRIP等)
  • red5流媒体服务器系统,red5 流媒体服务器配置
  • LaTeX之写论文有用的指令
  • 无法访问计算机请检查名称的拼写,win10系统访问共享文件夹提示“请检查名称的拼写”的修复方案...
  • Javascript如何阻止事件的默认行为?
  • C++模仿超炫Vista风格QQ界面,这个QQ界面真的是满满的回忆啊!
  • [原创]走上IT之路的坎坷经历
  • MyEclipse6.5 汉化方法(未测试)
  • SQL数据库增删改查
  • Struts 2 下载文件(12)
  • 移动硬盘接口坏了怎么办解决教程
  • Linux下Nodejs安装(完整详细)
  • 电脑缺失d3dx9_42.dll文件怎么解决,教你5种有效的解决方法
  • DIV滚动条属性及样式设置方式
  • tomcat 服务器使用 url rewrite (地址转向)
  • 《暮光之城》——如果那真的是你,就请你再勇敢一点、再直接一点,因为我早已经不可救药的爱上你了。你是吸血鬼也罢,你是致命危险也罢,你是什么,我都无所谓。
  • 家庭必备,轻、快、好用的WIN10自带虚拟机
  • 基于mybatis-jsp-bootstrap-servlet-mysql-maven的Javaweb课程设计--刷题后台管理系统(考试题目管理系统)
  • dedeCMS采集规则各大CMS采集规则通用
  • 滚动公告栏代码
  • 团队博客介绍
  • java面试题之OAuth 2.0是什么,四种支持的方法
  • windows xp 安装图解
  • Windows配置DHCP与IP管理
  • 【科研之路】室内定位入门之基于定位原理的分类概述
  • 详细74系列IC功能说明