GUI(图形界面)技术选型(gui设计界面)
ccwgpt 2024-10-24 09:04 39 浏览 0 评论
很多学习编程的小伙伴们在初学的时候会感到疑惑:为什么我学完了C语言,还是写不出一个完整的界面软件呢?其实使用底层代码直接写界面程序是很难的,倘若你要在屏幕上画出一条红色的直线,那么你需要找到显卡的地址,然后往显卡的寄存器中写入数据,这个过程非常的繁琐。所幸的是,我们可以找到很多封装好的GUI库,这些框架提供给你很多现成的功能,例如绘制图表、绘制按钮、显示界面、事件处理等。通过这些框架,我们可以很方便地完成界面绘制。下面笔者推荐几种最好用的GUI库,这几种库具备较强的兼容性,可以跨平台部署。我个人对跨平台是非常执着的,QQ使用的GUI技术不能跨平台,所以腾讯就需要另外派开发团队来开发Mac和Linux版本的QQ,而且不同的系统上不同版本的QQ体验差距相当大(尤其是Linux上那个简陋的QQ,完全是上古风格)。而WPS采用跨平台的Qt开发,所以现在WPS在Mac、Linux和移动端体验都非常棒。
1. Qt
Qt是一个跨平台的C++库,虽然它的功能不仅仅是绘制界面,但是如果要用C++做界面程序,没有比Qt更好的选择了。Qt从最初的Qt Widget发展到现在的Qt Quick,新项目强烈建议使用Qt Quick。因为Qt Widget是用C++直接绘制界面,虽然C++速度很快,但是CPU在处理图形的效率方面还是没法和GPU相比,这两者常常有数十倍的效率差异。现在计算机图形学和机器学习能发展得这么快,很大程度上就得益于GPU的快速发展。为了弥补Qt Widget在图形处理上低效的问题,Qt Quick横空出世。Qt Quick帧率可以达到数百(帧率:每秒图像刷新的次数),而且完全不会有卡顿(如果你还在用古董机,那另当别论)。另外,Qt Quick的开发模式换成了现在业界主流的前后端分离。前端界面用qml写,后台逻辑用C++写。qml是一种新的语言,但是它非常简单,比python更容易上手,其功能类似于HTML+CSS。另外qml还支持使用javascript作为界面脚本。Qt采用V8引擎运行javascript,效率有较高的保障。
Qt的官方文档非常详细,初学者只需要看四到五节视频课程,剩余的问题就都可以去Qt的官方文档里面找了。不过开发者需要有良好的C++基础。C++是一门相对复杂的语言,如果C++学习透了,那么可以轻松上手Qt。
其实Qt还支持用Python写(Python大法好啊),所以如果实在不想学习C++,那么用Python也是不错的选择。Qt的官网内容非常充实,初学者可能找不到文档的入口,这时候可以直接搜索网址https://doc.qt.io/,你可以在这个网站上选择不同的语言所对应的Qt文档(Python、C++或者qml)。
如果看不懂Qt的英文文档,一方面我建议你巩固好英文基础,新的技术常常是用英文发布的;另一方面,可以去B站找Qt的视频课程(B站其实是个学习软件,笑)。其中Qt Widget课程,传智播客讲的不错,可以尝试一下。Qt Quick是新技术,课程资源没有那么多,但是我依然强烈推荐各位直接跳过Widget,直接学习Quick。如果总是去啃那些即将淘汰的老技术,怎么提高自己的竞争力呢?何况Quick的运行效率比Widget快得多,是真正现代化的开发模式。下面我展示一张我正在做的Qt程序(使用的是Qt Quick,目前这个项目刚开始做,界面只搭建了一小块):
2. Electron
由于谷歌开发出了V8引擎,js在运行效率上已经和原生机器码不相上下了,这就带动了一系列技术链的发展,Electron就是其中之一。Electron是Chromium套壳浏览器,开发者可以用HTML/CSS/Javascript做界面程序,而且安全稳定跨平台(毕竟Chromium就是跨平台的)。而且,由于Electron是基于浏览器的,所以开发者可以使用庞大的前端技术链,例如Echart。除此以外,HTML/CSS是界面绘制能力最强的语言(qml可以与之争锋),开发者可以做出各种花里胡哨的界面(只有想不到,很少有做不到)。相对来说,其他的界面绘制技术在描述界面方面,要逊一筹。
使用Electron之前,你要学的不是Electron本身,而是HTML+CSS+Javascript。这些内容比较简单,它们是W3C设立的标准,你不需要去深入理解它们,更多的时候会要求你会背(Javascript除外,js毕竟是编程语言,还是很考验逻辑的)。如果背不下来也没关系,用到的时候查一下资料就好了。
3. Javafx
这是Java的官方库。如果你用的是JDK8,那么Javafx就集成在JDK之中。倘若你用的是JDK9及以上的版本,那么需要自己下载javafx库,或者通过Maven导入依赖包。Javafx是一个非常强悍的Java GUI库,很多人可能都不了解它,因为文档实在是太少了。但是Javafx是默认硬件加速的,其跨平台体验高于Qt,而又约等于Electron。Qt不同版本的代码是不能向下兼容的,然而Java可以。不过这很大程度上还是历史原因,因为Java最初是运行在浏览器中的小程序(Applet),由于浏览器需要面向不同的终端客户,所以Java程序必须像网页那样,可以跨平台访问。另外,使用Javafx还有一点非常值得考虑:javafx开发者可以蹭Java及其庞大的生态。这是非常美妙的事情,没有任何一门语言的库有Java那么多。
笔者有不少的javafx开发经历,对Javafx还算比较了解。下面推荐几个Javafx的学习方法:首推的是http://www.javafxchina.net/blog/docs/tutorial1/,这个网站是从Oracle官方网站翻译过来的,但是翻译质量极高,适合小白入门。如果要深入学习Javafx,我推荐各位看Oracle JDK8附带的下载案例,下载地址为https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html。把网页下拉到Java SE Development Kit 8u251 Demos and Samples Downloads,然后选择不同操作系统对应的的案例版本。下图是官方案例的一张截图。
这些案例基本上涵盖了javafx中所有常用的技术,例如动画、图表、三维图像等等。下面是我自己最近做的一个软件项目,就是基于javafx做出来的,用于做CT扫描,界面部分和算法用Java写,底层驱动用C++。
4. 需要慎重选择的技术
除了上面推荐的技术之外,C#也可以做桌面程序,但是我不推荐,因为C#桌面程序不能跨平台部署,后期可能会给你带来麻烦。.net虽然跨平台,但是支持力度还不够。由于C#我用的不多,这里就不多说了。另外,不要直接使用win32 API去开发界面程序,因为调用操作系统原生API的开发方式效率比较低,而且不能跨平台。
相关推荐
- 土豪农村建个别墅不新鲜 建个车库都用框架结构?
-
农村建房子过去都是没车库,也没有那么多豪车,一般直接停在路边或者院子里。现在很多人都会在建房子的时候留一个车库,通过车库可以直接进入客厅,省得雨雪天气折腾。农村土豪都是有钱任性,建房子跟我们普通人不一...
- 自建框架结构出现裂缝怎么回事?
-
三层自建房梁底与墙体连接处裂缝是结构问题吗?去前帮我姑画了一份三层自建房的图纸,前天他们全部装修好了。我姑丈突然打电话给我说他发现二层的梁底与墙分离了,有裂缝。也就是图纸中前面8.3米那跨梁与墙体衔接...
- 钢结构三维图集-框架结构(钢柱对接)
-
1、实腹式钢柱对接说明1:1.上节钢柱的安装吊点设置在钢柱的上部,利用四个吊点进行吊装;2.吊装前,下节钢柱顶面和本节钢柱底面的渣土和浮锈要清除干净,保证上下节钢柱对接面接触顶紧;3.钢柱吊装到位后...
- 三层框架结构主体自建房设计案例!布局13*12米占地面积156平米!
-
绘创意设计乡村好房子设计小编今日头条带来分享一款:三层框架结构主体自建房设计案例!布局13*12米占地面积156平米!本案例设计亮点:这是一款三层新中式框架结构自建房,占地13×12米,户型占地面积...
- 农村自建房新宠!半框架结构凭啥这么火?内行人揭开3个扎心真相
-
回老家闲逛,竟发现个有意思的现象:村里盖新房,十家有八家都选了"半框架结构"。隔壁王叔家那栋刚封顶的二层小楼,外墙红砖还露着糙面没勾缝,里头的水泥柱子倒先支棱得笔直,这到底是啥讲究?蹲...
- 砖混结构与框架结构!究竟有何区别?千万别被坑!
-
农村自建房选结构,砖混省钱但出事真能保命吗?7月建材价格波动期,多地建房户因安全焦虑陷入选择困境——框架结构虽贵30%,却是地震区保命的关键。框架柱和梁组成的承重体系,受力分散得像一张网。砖混靠墙硬扛...
- 砖混结构与框架结构,究竟有何区别?千万别被坑!
-
农村建房选砖混结构还是框架结构?这个问题算是近期留言板里问得最多的问题了。今天咱们说说二者的区别,帮您选个合适的。01成本区别假如盖一栋砖混结构的房子需要30万,那么换成框架结构,一般要多掏30%的费...
- 6个小众却逆天的App神器,个个都是黑科技的代表
-
你的手机上有哪些好用的软件?今天我就给大家分享6个小众却逆天的App神器,个个都是黑科技的代表!01*Via浏览器推荐理由:体积极小的浏览器,没有任何广告。使用感受:它的体量真的很小,只有702KB,...
- 合肥App开发做一个app需要多少钱?制作周期有多久?
-
在移动互联网时代,开发一款APP已成为企业数字化转型与个人创业的重要途径。然而,APP的开发成本与制作周期受功能复杂度、技术架构、团队类型等多重因素影响,差异极大。好牛软件将从这两个维度展开分析,帮助...
- 详解应对App臃肿化的五大法则
-
编者注:本文转自腾讯ISUX。先来看一张图:图上看到,所有平台上用户花费时间都在减少,除了移动端。观察身边也是如此,回家不开电脑的小伙伴越来越多。手机平板加电视,下班场景全搞定。连那些以前电脑苦手的...
- 实战!如何从零搭建10万级 QPS 大流量、高并发优惠券系统
-
需求背景春节活动中,多个业务方都有发放优惠券的需求,且对发券的QPS量级有明确的需求。所有的优惠券发放、核销、查询都需要一个新系统来承载。因此,我们需要设计、开发一个能够支持十万级QPS的券系...
- 8种移动APP导航设计模式大对比
-
当我们确定了移动APP的设计需求和APP产品设计流程之后,开始着手设计APP界面UI或是APP原型图啦。这个时候我们都要面临的第一个问题就是如何将信息以最优的方式组合起来?也许我们对比和了解了其他一些...
- 数字资产支付 App 的技术框架
-
开发一款功能强大、安全可靠的数字资产支付App需要一个整合了区块链技术、后端服务、前端应用以及第三方集成的全栈技术框架。这个框架的核心在于保障数字资产的安全流通,并将其高效地桥接到传统的法币支付场...
- 从MyBatis到App架构:设计模式全景应用指南
-
从MyBatis到App架构:设计模式全景应用指南引言在企业级应用和服务端开发领域,MyBatis凭借其灵活、简洁、强大的ORM映射能力被广泛应用。而它之所以能拥有如此优秀的可扩展性和工程可维护性,正...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- jpa框架 (47)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- mfc框架 (52)
- abb框架断路器 (48)
- beego框架 (52)
- java框架spring (58)
- grpc框架 (65)
- tornado框架 (48)
- 前端框架bootstrap (54)
- orm框架有哪些 (51)
- 知识框架图 (52)
- ppt框架 (55)
- 内联框架 (52)
- cad怎么画框架 (58)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)