利用qml与golang打造gui客户端(代码片段)

kamir kamir     2023-04-15     307

关键词:

前言

本人一直在寻求一个利用golang来编写linux的gui程序的工具,凑巧之间发现了qml这个好东西。其简单的语法加上底层c++(Qt)的支持让我直接就爱上了他,并且众所周知,golang可以与c++进行交互那么既然c++可以和qml进行通信,那么golang也可以与qml进行通信。Qt官方虽然没有关于golang的官方支持(Python有PyQt),但是github上有很多第三方的支持库。这里挑三个典型的qml&golang的第三方库区分下优缺点,并选出我个人认为最适用的来进行后续Gui程序的编写

Go-Qml、therecipe/qt、qamel对比

Go-Qml(Github)

go-qml这个库可以说是想到的最早支持golang&qml的第三方库了,百度上大多数golang和qml通信的教程也是关于这个库的
优点:

  • 百度资料丰富,上手简单
  • 有官方的教程视频,可以边看边学

缺点:

  • 很久不更新维护了

therecipe/qt(Github)

therecipe/qt这个库可以说是目前支持golang&qml最齐全的第三方库库了,其坐拥7k的stars足以可见其效果有多??逼
优点:

  • 功能最齐全
  • 有官方examples
  • 支持的平台最丰富,支持Windows / macOS / Linux / FreeBSD / Android / iOS / Sailfish OS / Raspberry Pi / AsteroidOS / Ubuntu Touch / JavaScript / WebAssembly
  • 支持docker

缺点:

  • 安装比较困难,由于国内某个原因,在安装的时候会有很多网络问题,建议git下来自行编译安装
  • 需要安装Qt的全部组件,如果在Qt安装时没有安装全部组件,在初始化过程中会报错尤其是QtScripts这个组件
  • 体积庞大,编译一次需要生成很多中间c++代码,速度也比较慢,脱离了golang编译速度快的初衷

Qamel(Github)

qamel这个库是受到therecipe/qt这个项目的启发而创建的,其非常轻量,安装简单上手非常容易
优点:

  • 安装非常简单,每一个步骤都有详细介绍,跟着一步一步做保证没有问题
  • 有官方examples
  • 编译速度很快,体积比therecipe/qt
  • 支持docker

缺点:

  • 功能没有therecipe/qt完善
  • 仅支持Linux,Windows系统交叉编译

小结

由于go-qml已经很久没有维护了所以肯定不会选用他,剩下的就在therecipe/qtqamel选了。本人也是两个库都安装了一次,therecipe/qt可以说是非常的坑,像什么无法初始化工具qtsetup、go mod项目无法编译、编译速度太慢体积过大等等;而qamel的安装可谓一路没有坑点,每一步他都有详细的说明,除非你看不懂英文绝对不会犯错误,并且编译速度非常快但是支持的平台太少了。因此总结如下:

  • 如果你有跨平台的要求如Windows、MacOs、Linux互通,则选择therecipe/qt
  • 如果你想要快速的编译速度则选择qamel
  • 如果你不想本机配置环境想通过docker则两者都可以
  • 如果你想要一个简单的够用的工具则选择qamel

pyqt5与qml

...),它可以让您使用传统的言语快速开发应用。下面介绍利用PyQt5与QML快速开发GUI。首先,创建一个名为view.qml的QML文件:该文件描述的是“绿色的矩形框”,“文本为:HelloWorld”。接下来要使用PyQt5获取并创建GUI:效果: 查看详情

golang将crd与动态go客户端一起使用的示例(代码片段)

查看详情

基于golang打造的开源waf网关(代码片段)

基于Golang打造的开源WAF网关Github地址https://github.com/Janusec/janusec产品介绍https://mp.weixin.qq.com/s/OOA9LwPE0ulBqkIFkXax-Q构建可扩展的应用安全基础设施Janusec应用网关(JanusecApplicationGateway),提供WAF(WebApplicationFirewall,Web应用 查看详情

手把手带你打造一款"签名设计"的gui图形界面!(代码片段)

...天我们完成了Tkinter窗口搭建过程,今天需要做的就是利用爬虫得到我们 查看详情

基于gui的简单聊天室02(代码片段)

服务器端与上一篇相比,加进了线程内部类,解决多个客户端连接时,服务器无法全部响应的问题。利用List集合来装载客户端的对象。还需要注意全局变量的应用。 1/**2*相比01,加进了线程内部类,解决多个客户端连接时,... 查看详情

基于gui的简单聊天室01(代码片段)

...,gui,流的读入和写出,线程控制等思路:1、首先是在客户端中先建立好聊天的GUI2、建立服务器端,设置好端口号(用SocketServer),其中需要两个boolean变量来分别表示服务器是否已经开启和是否有客户端连接进来,  利用whi... 查看详情

浅入深出etcd之集群部署与golang客户端使用(代码片段)

...基本原理。这次来说说现实一点的集群部署和golang版本的客户端使用。因为在实际使用过程中,etcd的节点肯定是需要2N+1个进行部署的,所以有必要说明一下集群的部署。集群部署网上有很多集群部署的教程,有的很复杂,其实... 查看详情

go语言的gui方案,与qt和qml都能绑定,也有从头写的gxui

半官方:https://godoc.org/golang.org/x/exp/shiny作者:王益链接:https://www.zhihu.com/question/22483719/answer/21753337来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。我从2014年底开始使用andlabs/ui·GitHub... 查看详情

qtquick基础用法(代码片段)

QtQuick基础用法1.简介1.1QtWidgets与QML/QtQuick2.QML与QtQuick2.1QtQuick1.xVSQtQuick2.x3.信号(Signal)与槽(Slot)4.QML与C++混合编程4.1原理和方法4.2QML访问C++类(QML=>C++)4.2.1信号和槽4.2.2把类注册到QML中4.2.3C&#... 查看详情

使用qml创建界面(转)(代码片段)

...014/article/details/51378307 在Qt编程中,我们可以使用纯C++代码,或C++和XML结合的方式来创建GUI程序。下面我介绍一下如何在QtCreater中用QML创建GUI程序。 首先打开QtCreater,选择“QtQuickApplication”:   查看详情

alibaba/ioc-golang正式开源——打造服务于go开发者的ioc框架(代码片段)

...计原则,可以用来减低计算机代码之间的耦合度。IOC-golang是一款服务于Go语言开发者的依赖注入框架,基于控制反转思路,方便开发人员搭建任何Go应用。在本文中,我不会罗列这个项目的种种功能与实现,而... 查看详情

golang的socket服务端与客户端(代码片段)

服务端服务端的处理流程监听端口接收客户端的链接创建goroutine,处理该链接packagemainimport("fmt""net")funcmain()fmt.Println("startserver...")listen,err:=net.Listen("tcp","0.0.0.0:50000")iferr!=nilfmt.Println("listenfailed,err:",err)returnforconn,err:=listen.Accept()//监... 查看详情

c++生成qml代码与qml里面集成qwidget(代码片段)

目录1 QML代码生成2 注册机制的含义3  QWidgetInQml QML里面集成widget4 QML_OSR_EXP  将QtWidgets嵌入到QML界面中的一种示范5 参考链接1 QML代码生成/*******************************************************************************QSkinny-Copyright 查看详情

用tkinter打造自己的pythonide开发工具利用hp_tk模块设计自己的代码编辑器(代码片段)

用Tkinter打造自己的PythonIDE开发工具(4)利用HP_tk模块设计自己的代码编辑器HP_tk.py模块是小白量化第二代量化系统中的开发模块。其中HP_tk.py模块是小白量化系统GUI的开发库,上一篇介绍的Tree控件使用了HP_tk.py模块中... 查看详情

golang的一个简单实用的http客户端库httpc(代码片段)

httpc简介httpc这是一个发起http请求的客户端库。它具有的特色包括:简单易用、易于扩展、支持链式调用、支持多种格式的处理等。特别适合用来调用restfull风格的接口。项目地址https://coding.net/u/recallsong/p/httpc/git下载gogetgit.coding.... 查看详情

利用opengl纯手工打造一个金字塔(代码片段)

环境:linux(ubuntu16.4)、gcc第一步:先出一个三角形线框  效果:    实现代码:    MakefileBDIR=-L/usr/X11R6/libCC=gccCFLAGS=$(COMPILERFLAGS)LIBRARIES=-lX11-lXi-lglut-lGL-lGLU-lmpyramid:pyramid.o$(CC)$(CFLAGS)-o[email prote 查看详情

golang去言语の中でÇ言语を利用する(代码片段)

查看详情

qml与qtc++交互机制探讨与总结(转)(代码片段)

原文转自 https://www.cnblogs.com/aoldman/p/4103510.html 介绍QML和C++对象可以通过,signals,slots和属性修改进行交互。对于一个C++对象,任何数据都可以通过Qt的Meta-ObjectSystem暴露给QML(何总方法,后面介绍),同时,任何的QML对象数... 查看详情