工具推荐二

news2025/2/28 2:59:54

(点击上方公众号,可快速关注)

GUI框架

我是个后端程序员,使用GUI框架的机会很少,主要用来编写个人或工作中的一些小工具上,经验有限,仅供参考。

  • Tk框架

    这个框架tcl语言自带,在python里由pytk包提供。Python默认的IDLE编辑器的界面就是pytk编写的。它功能简单,性能也一般,相对应地学起来也简单,适合一些小的个人项目。

  • Java系框架

    早期的awt已淘汰,swing未来堪忧,即使更现代的JavaFX未来也不明朗。桌面开发日渐式微,现在桌面开发的需求越来越少,GUI框架发展也日益缓慢甚至停滞。还有个swt的框架,eclipse的界面就是用它写的。

    swing是纯Java实现、跨平台,样式在各个平台保持一致,带来的后果是性能相对不高,默认的观感也比较丑,netbeans和Intellij界面都是swing写的;性能还好,至少直观感受来看netbeans要比eclipse响应要好。swt就是因为忍受不了swing的性能不高发展起来的,由于使用了原生组件所以性能相对要好。JavaFx使用最新的技术,更好地融入了html/css,这是每个GUI框架的发展方向。

    推荐JavaFx。

  • QT

    最强大的C++ GUI框架,没有之一,商业上用得也比较多,开源桌面KDE就是用QT开发的。

    如果有跨平台的需求,基本上是唯一解。

  • GTK

    用C编写的GUI框架,Gnome桌面的功臣,这是我用得时间最长的GUI框架,虽然也跨平台,但主战场还是在Linux上,其他平台支持较差。随着新版本的发布,对其他平台支持也越来越好。由于是C写的,所以很多语言都有其绑定,再加上实现了GObject Introspection,使得其他语言使用该框架更加方便,比如,Haskell中的gtk-gi库就是通过程序自动生成的,不用手工添加ffi实现,减少了繁重的人力。

    如果你使用的语言的QT绑定质量不高的话,可以考虑一下这个框架。

  • duilib

Duilib是一个Windows下免费开源的DirectUI界面库,由于简约易扩展的设计以及稳定高效的实现被各大互联网公司普遍接受,广泛应用于包括IM、视频客户端、股票行情软件、导航软件、手机辅助软件、安全软件等多个行业的众多pc客户端软件。Duilib还在不断的发展中,在文档、例子、动画、渲染引擎等多个方面将持续改进。

之前写过一篇文章推荐过这个框架,国内很多企业都使用,如,微信。当时还推荐了另外一个C++的GUI框架nana,可惜基本停滞更新了。

如果要在Window下使用C++开发,可以考虑。

  • HTML5+CSS3+JS

    上面提到的跨平台的QT、Gtk等,也只是跨PC的各个平台,移动平台是不支持的。如果希望编写的应用程序同时跑在多个平台,比如Windows、Linux、MacOS、iphone、Android等,可能只有一个选择了,就是基于Web开发,尤其是个人根本没有精力在每个平台开发原生应用。

    基于HTML5+CSS3+JS的框架很多,比如,用的比较多的Electron,以及Haskell的reflex。

    性能是其硬伤,基本上所有这类软件,都给人一种飘飘软件的感觉。如果对性能要求高,就不要考虑这些Web组件了。

这个领域经过早年PC的繁荣,产生了大量的框架,除了上面介绍的,还有,wxWidgets、FLTK…,甚至MFC,可以多从网上搜搜,一定能找到适合的一款。这个领域基本也属于“夕阳产业”了,也不要投入太多的精力。

C++构建工具

在构建程序时,手工输入命令比较繁琐,每次都要重复输入,而且容易出错,怎么能让这些过程实现某种自动化呢,于是出现了构建工具。构建工具本质上就是一个批处理脚本,然后根据输入自动执行某些过程,比如,编译、连接、安装、打包等。严格来讲,下文介绍的工具,除了make,其他都不是构建工具,属于构建工具生成器的范畴,而且部分工具还有包管理器的功能,这里不过分区分。

现代编程语言基本上都有自己的构建工具,比如Rust的Cargo,Haskell的Cabal等。而C/C++由于出现的比较早,在历史的长河里出现了很多构建工具,这部分主要介绍C/C++的构建工具。

  • make

    最早使用的构建工具,遇到的主要问题有以下几个:

  • 跨平台困难,除了*nix平台,早些年在其他平台用还是很困难的;

  • 没标准、不统一,linux下的make和Unix下的make是有差异的,在FreeBSD上编译软件经常遇到该类的问题;

  • 原始,所有的指令都需要自己写,若支持多个编译器、多个系统,需要处理大量的细节;

  • 语法不友好,经典的空格和TAB的问题,刚上手就遇到过,再加上与shell编程关系紧密,实在是不想学。

  • GNU Autotools

    这个工具只听没用过,第一次见面被它的复杂吓着了。相比make,它主要用于自动生成较大项目的Makefile,避免繁琐的命令行操作。不过对于较小的项目,真的不如make直观,这是我当时放弃的主要原因。

  • cmake

    事实上的标准,优点很多,比如能生成很多类型的构建系统,比如,VS项目、makefile、ninja等,有自己的包管理器,同时支持Conan、vcpkg等包管理器等等。

    不过,使用的DSL语言可读性是真的差,最受人诟病的是函数没有返回值,通过修改变量的方式将值从函数传出来,方式很笨很丑;语言设计得很蹩脚,加上官方文档得晦涩难懂,导致学起来很费劲。

    新项目,我推荐后面介绍的meson和xmake,后两个工具吸取了cmake的经验教训,比cmake好用得多。虽然极其不情愿推荐cmake,但由于其先发优势而建立起来地生态,有时候必须还得学一下,原因有二:

  • 事实上的标准,不是危言耸听,很多项目都使用了cmake,很多IDE支持cmake,在工作学习中不可避免地用到;

  • 跟现代C++类似,现代cmake极大提高了可用性,可以一试。

  • meson

    站在了cmake的肩膀上,继承了cmake的优点,规避了缺点。我选择它主要原因是其语法的简洁、高可读,而且速度也很好。现在也有很多大型项目迁移到meson,比如大名鼎鼎的gnome。

    强烈推荐

  • xmake
    这个更是集大成者,用作者的话说:

    Xmake = Build backend 
        + Project Generator 
        + Package Manager 
        + [Remote|Distributed] Build 
        + Cache

    别人有的它有,别人没有的它也有。

    强烈推荐

f45148e9aa4a53368f8e581da1a61286.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/520386.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

海报图片生成服务在狐友的落地实践

本文字数:22817字 预计阅读时间:58分钟 项目背景 狐友作为搜狐的一款社交产品,在流量传播上有着旺盛的需求点。而在流量传播所需的众多载体之中,海报图片以其简单的分享形式、可定制的视觉体验、自带二维码识别导流等特点&#xf…

入门与 Follow GPT 的路径分析:LLM 道阻且长,行则将至

动手点关注 干货不迷路 本文只用于技术交流,仅代表作者个人观点。 作为 CEO,Sam 将 OpenAI 的内部氛围组织的很好,有位 OpenAI 的前员工告诉拾象团队,当 2018 年 GPT-2 的论文被驳回时,Sam 在团队周会上将拒信的内容朗…

ONES X 高测股份|用数字化,重构新材料企业的研发管理体系

近日,ONES 签约高硬材料切割的领军企业——高测股份,助力高测股份建立有效、规范的研发测试管理体系,实现项目管理、测试管理、知识库管理、工时管理、组织效能管理等端到端的研发管理,提升测试效率和产品交付质量,并进…

用Python+OpenCV+Yolov5+PyTorch开发的车牌识别软件(包含训练数据)

目录 演示视频 软件使用说明 软件设计思路 演示视频 这是一个可以实时识别车牌的软件,支持图片和视频识别,以下是软件的演示视频。 车牌识别软件 点击查看代码购买地址 软件使用说明 1. 下载源码后,首先安装依赖库。项目所用到的依赖库已…

bash shell 基础命令

章节目录: 一、浏览文件系统1.1 Linux 文件系统1.2 遍历目录 二、列出文件和目录三、处理文件3.1 创建文件3.2 复制文件3.3 命令行补全3.4 链接文件3.5 文件重命名3.6 删除文件 四、管理目录4.1 创建目录4.2 删除目录 五、查看文件内容5.1 查看文件类型5.2 查看整个…

【Linux】Linux编辑神器vim的使用

目录 一、Vim的基本概念 二、Vim的基本操作 1、进入vim 2、正常模式切换至插入模式 3、插入模式切换至正常模式 4、正常模式切换至底行模式 5、退出Vim编辑器 三、Vim正常模式命令集 1、移动光标 2、删除文字 3、复制 4、替换 5、撤销 四、Vim底行模式命令集 1、列出行号 2、光…

【Linux】进程信号捕捉

前言 在【Linux】进程信号及信号产生中,我们提到,进程接收到信号,并不是立刻处理,而是在合适的时候才执行相应的动作,那合适的时候是什么时候呢,进程捕捉信号的过程究竟是怎么样的呢?本篇博客就…

Python入门(七)if语句(二)

if语句(二) 1.if语句1.1 简单的if语句1.2 if-else语句1.3 if-elif-else结构1.4 使用多个elif代码块1.5 使用多个elif代码块 2.使用if语句处理列表2.1 检查特殊元素2.2 确定列表不是空的2.3 使用多个列表 作者:xiou 1.if语句 前面我们理解了…

React Native技术探究:开发高质量的跨平台移动应用的秘诀

作为一个跨平台移动应用开发框架,React Native在开发过程中能够有效提高开发效率、降低开发成本、缩短上线时间,因此备受开发者的欢迎。然而,如何使用React Native开发出高质量的跨平台移动应用呢?本文将探究这个问题,…

(一)PUN 2基本介绍

一、开始 (一)基本简介 1.简介 Photon Unity Networking (PUN) 是一个用于多人游戏的 Unity 包。灵活的配对让您的玩家进入可以通过网络同步对象的房间。 RPC、自定义属性或“低级别”光子事件只是其中的一些功能。快速且(可选)可靠的通信是通过专用的…

选卡攻略!一分钟教你选择一款好的流量卡!

很多流量卡看似便宜,但用起来套路不少,所以,挑选一款流量卡并不是只看资费,而且要了解它的各个方面,比如:优惠期、合约期等等,今面,小编就带大家一块了解如何选择一款好的流量卡。 …

默认的HuggingFace模型

介绍 在本文中,我将探讨表征学习中常见的一种做法——使用预训练神经网络的冻结状态作为学习特征提取器。 具体而言,我感兴趣的是研究使用这些提取的神经网络特征训练的简单模型的性能与使用迁移学习初始化的微调神经网络的性能的比较。预期受众主要是数…

一款功能强大的多合一聚合支付Discuz插件,可直接替换DiscuzX 3.5自带的支付接口

源码介绍: Discuz论坛多合一聚合支付接口插件,该插件直接替换了自带的支付接口功能, 增强了支付的扩展性,自带支持支付宝、微信、QQ钱包官方支付, 以及彩虹易支付、我爱支付、虎皮椒等支付通道,并且可以…

专家共话:存力一体成“东数西算”全场景利器

从2022年2月17日正式全面启动至今,“东数西算”工程已经度过了一周年。一年多的实践探索证明,激活数据要素,推动算力成为核心生产力,离不开“存力先行”。其中,东西部存力一体化,是支撑“东数西算”全场景应…

「读书感悟系列」友者生存:与人为善的进化力量(我会解释人类善良和暴力的进化原因)...

作者 | gongyouliu 编辑 | gongyouliu ‍ 最近花了不长的时间读完了这本『友者生存:与人为善的进化力量』,由于我对进化生物学非常感兴趣,又有4年的生物学学习背景,读起来还是非常容易的,这本书算是人类进化学的科普读…

tcp cubic 与随机丢包

前面提到过一个 AIMD 的修正方法,“二次机会 MD”:首次丢包只 MD 收缩一个相对较小的比例,再次丢包时再继续收缩,直到 beta * Wmax。 效果如下图: 大意是在检测到丢包时,先 MD 一个相对小的缩放比例&…

DS215KLDCG1AZZ03A如何编写温度比例的代码?

DS215KLDCG1AZZ03A如何编写温度比例的代码&#xff1f; 可编程逻辑控制&#xff0c;简称PLC&#xff0c;由美国机械工程师迪克莫利于1年1968月<>日首次设计。PLC最初是为了减少汽车行业员工的工作量而开发的&#xff0c;从那时起&#xff0c;它们已被用于所有其他恶劣环境…

常用linux多场景查找文件的方法及对比

波哥整理了在linux中根据文件名称查文件&#xff0c;根据文件内容查找文件&#xff0c;根据进程号查找文件的方法及命令详细解释。 一、find命令 find命令可以在指定目录下查找文件&#xff0c;其语法如下&#xff1a; find <目录> <选项> <匹配模式> 选项和…

vue-4:注册组件,组件传参,特殊属性ref $parent $root,透传,内置组件,自定义指令,mixins混入

注册组件&#xff0c;使用组件&#xff08;项目中都是写component中&#xff09; 为什么用组件&#xff1a;组件可以复用&#xff0c;每一个组件都是独立的&#xff0c;模板&#xff0c;数据&#xff0c;css样式互不影响 全局注册组件component&#xff1a;请勿滥用全局组件in…

一个打通基于XML管理Bean

目录 准备工作 添加依赖 引入配置文件 获取bean ①方式一&#xff1a;根据id获取 ②方式二&#xff1a;根据类型获取 ③方式三&#xff1a;根据id和类型 ④注意的地方 ⑤扩展知识 依赖注入之setter注入 ①创建学生类Student ②配置bean时为属性赋值 ③测试 依赖注…