Qt-----初识

1. 什么是Qt


定义:Qt是一个跨平台的应用程序和用户界面框架,主要用于开发具有图形用户界面的应用程序,同时也支持非GUI程序的开发。
编程语言:主要使用C++,但也提供了对Python(PyQt)、JavaScript(Qt for JavaScript)等语言的支持。
诞生时间:1991年,由Qt Company(原Trolltech)开发。
用途:主要用于开发桌面应用程序,也可以用于嵌入式系统、移动设备、游戏开发等领域。

2. Qt的应用领域


客户端开发:用于开发直接与用户交互的应用程序,如网页浏览器(例如基于Qt的浏览器)、音乐播放器、视频播放器等。
桌面应用开发:Qt的主要应用领域,支持Windows、Linux和Mac操作系统,是开发跨平台桌面应用程序的首选框架之一。
移动应用开发:虽然Qt支持移动应用开发,但由于市场和生态系统的原因,目前移动应用开发中较少使用Qt。

3. Qt的优势

跨平台:支持Windows、Linux和Mac,一套代码可以在多个平台上运行,大大减少了开发和维护成本。

商业成熟:被大量商业公司采用,如WPS、VirtualBox等,提供了大量的就业机会和商业支持。

持续更新:相比MFC等旧技术,Qt持续更新,支持新特性,保持了技术的现代性和竞争力。

功能全面:提供了丰富的功能模块,如图形、网络、数据库、多媒体等,几乎涵盖了所有应用程序开发的需求。

4. Qt与其他Windows GUI开发方案的对比

  • Windows API:提供底层API,开发起来非常原始,也非常繁琐,需要处理大量的底层细节。

  • MFC:上个世纪90年代影响力非常大,但现在已经不更新了,技术相对陈旧。

  • Qt:仍然在不断的推陈出新,更新新的版本,至今仍然非常有生命力,支持最新的技术和特性。

  • Windows Forms:给C#(.net)量身定做的一套开发GUI技术体系,包括WPF和UWP,主要用于Windows平台。

  • Electron:基于HTML这样的网页,打包成一个Windows上运行的客户端程序,但运行效率低,不适合性能要求高的应用。

  • Qt:跨平台的C++图形用户界面应用程序框架,是上述解决方案中非常能打的商业公司产品,提供了丰富的功能和良好的用户体验。

5. 框架与库的区别

  • 库(Library):程序员调用库函数,程序员是主体,库只是提供一些功能模块供程序员使用。

  • 框架(Framework):程序员配合框架,完善填充框架中留出的一些细节,框架占主体,程序员需要按照框架的规范和要求进行开发。

6. C++生态中的Qt

  • C++的生态是割裂的,不像Java存在一些巨无霸社区,C++不同的开源社区/大厂,各自有自己的框架,各自为政。

  • 相比之下,Qt这种能够被大家共同认可的框架,在C++生态中是不多见的,它提供了跨平台的开发能力,丰富的功能模块,良好的用户体验,是C++开发中的重要选择之一。

7. Qt 支持的操作系统

  • Windows:支持各个版本,尤其是Linux中的KDE桌面基于Qt构建的。

  • Linux:各种发行版均支持,Linux桌面环境中,存在好几家桌面环境:

    • GNOME(基于GTK构建的)

    • KDE(基于Qt构建的)

  • Mac系统:同样支持,Qt在Mac上也能很好地运行。

  • 嵌入式系统:Qt也广泛应用于嵌入式系统开发,如日常使用的冰箱、洗衣机、路由器、投影仪等设备的内部计算机中。

8. 嵌入式系统开发

  • 应用场景:嵌入式系统通常用于日常设备中,这些设备内部也有计算机,但配置较低,成本也低。

  • Qt的优势:Qt可以用于嵌入式系统的图形化界面编程,尤其是在一些工业设备上,Qt能够提供稳定和高效的解决方案。

9. Qt 的商业许可

  • 商业许可:如果你想使用Qt开发一个程序,可以向Qt公司购买商业许可证(花钱)。

  • 开源许可:也可以选择开源许可,不必花钱,直接使用Qt进行开发。

10. Qt 的优点

  • 跨平台:几乎支持所有平台,包括Windows、Linux、Mac和嵌入式系统。

  • 接口简单:容易上手,学习Qt框架对学习其他框架有参考意义。

  • 内存管理:一定程度上简化了内存回收机制,半自动的垃圾回收,能够简化内存释放,提高程序运行效率。

  • 开发效率高:能够快速构建应用程序。

  • 社区支持:有很好的社区氛围,市场份额在慢慢上升。

11. Qt 的生态系统

  • 技术支持:主要提供的是技术支持,商业许可提供了更多的功能和服务。

  • 开源社区:如Redhat(收费Linux发行版)和Oracle(收费的数据库)等公司也在使用Qt。

12. Qt 的未来

  • 持续更新:在软件开发中,并非是越新就越好,但在进行商业开发的时候,相比之下,引入新的特性,不如优先确保不引入严重的问题。

  • 市场份额:Qt的市场份额在慢慢上升,越来越多的公司和开发者选择使用Qt进行开发。

注:本篇文章部分内容是根据老师所讲内容,依据板书用AI串联成文的,时间较为紧张,还望各位读者多多包涵~~

 

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

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

相关文章

理解微信体系中的 AppID、OpenID 和 UnionID

前言: 在开发微信相关的服务(如小程序,公众号,微信开放平台等)时,很多人都会接触到几个看起来相似但实际用途不同的额ID: AppiD, OpenID,UnionID. 搞清楚这三者的区别,是微信生态开发中的基本功,本文将从开发者视角触发,深入浅出地解释它们的关系,区别以及实际应用场景一.什么是…

FFmpeg,如何插入SEI自定义数据

FFmpeg,如何插入SEI自定义数据 一、什么是SEI? SEI(Supplemental Enhancement Information,补充增强信息)是H.264/H.265视频编码标准中的一种元数据载体,它允许在视频流中嵌入额外的信息,如时…

为什么分类任务偏爱交叉熵?MSE 为何折戟?

在机器学习的世界里,损失函数是模型的“指南针”——它定义了模型“好坏”的标准,直接决定了参数优化的方向。对于分类任务(比如判断一张图片是猫还是狗),我们通常会选择交叉熵作为损失函数;而在回归任务&a…

[echarts]横向柱状图

前言 接到一个需求,需要展示一个横向的柱状图,按数量从大到小排序,并定时刷新 使用react配合echarts进行实现。 react引入echarts import React, { useEffect, useRef } from react; import * as echarts from echarts; import DeviceApi fro…

【开源项目】轻量加速利器 HubProxy 自建 Docker、GitHub 下载加速服务

​​引言​​ 如果你经常被 Docker 镜像拉取、GitHub 文件下载的龟速折磨,又不想依赖第三方加速服务(担心稳定性或隐私),今天分享的 ​​HubProxy​​ 可能正是你需要的。这个开源工具用一行命令就能部署,以极低资源消…

java web jsp jstl练习

JSP 的学习。 核心功能模块 1. 源代码层 ( src ) HelloWorld :主程序入口领域模型 : domain 包含User.java和ceshi.java控制器 : servlet 包含登录验证和验证码相关ServletWeb表现层 ( web ) JS…

VSCode 完全指南:释放你的编码潜能

零、简介 在当今的软件开发领域,代码编辑器的选择至关重要,它就像是工匠手中的工具,直接影响着工作效率和成果质量。Visual Studio Code(简称 VSCode)自问世以来,迅速在全球开发者社区中崭露头角&#xff…

《n8n基础教学》第一节:如何使用编辑器UI界面

在本课中,你将学习如何操作编辑器界面。我们将浏览画布,向您展示每个图标的含义,以及在 n8n 中构建工作流程时在哪里可以找到您需要的东西。本课程基于 n8n 最新版本 。在其他版本中,某些用户界面可能有所不同,但这不会…

gcc g++ makefile CMakeLists.txt cmake make 的关系

gcc:C语言编译器g:C编译器makefile:定义编译规则、依赖关系和构建目标。可以手动编写,也可以由CMakeLists.txt生成cmake:读取CMakeLists.txt文件,生成Makefilemake:构建工具,执行Mak…

SFT 训练器

SFT 训练器 “训练时间到!” 我们现在终于可以创建一个监督微调训练器的实例了: trainer = SFTTrainer( model=model, processing_class=tokenizer, args=sft_config, train_dataset=dataset, )SFTTrainer 已经对数据集进行了预处理,因此我们可以深入查看,了解每个小批次…

Android Material Components 全面解析:打造现代化 Material Design 应用

引言 在当今移动应用开发领域,用户体验(UX)已成为决定应用成功与否的关键因素之一。Google推出的Material Design设计语言为开发者提供了一套完整的视觉、交互和动效规范,而Material Components for Android(MDC-Android)则是将这些设计理念转化为可重用…

Windows使用Powershell自动安装SqlServer2025服务器与SSMS管理工具

安装结果: 安装前准备: 1.下载mssql server 2025安装器 2.下载iso镜像 3.下载好SSMS安装程序,并放到iso同目录下 4.执行脚本开始自动安装

09 RK3568 Debian11 ES8388 模拟音频输出

1、设备树配置 确认自己的i2c,使用sdk带的驱动es8323 /SDK/kernel/sound/soc/codecs/es8323.c es8388_sound: es8388-sound {status = "okay";compatible = "rockchip,multicodecs-card"; rockchip,card-name = "rockchip,es8388-codec"; …

力扣-199.二叉树的右视图

题目链接 199.二叉树的右视图 class Solution {public List<Integer> rightSideView(TreeNode root) {List<Integer> res new ArrayList<>();Queue<TreeNode> queue new LinkedList<>();if (root null)return res;queue.offer(root);while …

Android Bitmap 完全指南:从基础到高级优化

在 Android 开发中&#xff0c;图像处理是一个核心且复杂的领域&#xff0c;而 Bitmap 作为 Android 中表示图像的基本单位&#xff0c;贯穿了从简单图片显示到复杂图像编辑的各个场景。然而&#xff0c;Bitmap 处理不当往往会导致应用性能下降、内存溢出&#xff08;OOM&#…

unity日志过滤器

背景&#xff1a;之前做游戏的时候和同组的同事聊过说日志过滤尽量不要限制大家怎么使用日志打印的接口&#xff0c;不要加额外的参数&#xff0c;比如多加一个标签string,或者使用特定的接口&#xff0c;枚举。最好就是日志大家还是用Debug.Log无感去用&#xff0c;然后通过勾…

OpenGL Camera

一. lookAt函数的参数含义glm::mat4 view glm::lookAt(cameraPos, // 相机在世界坐标系中的位置&#xff08;任意值&#xff09;cameraPos cameraFront, // 相机看向的目标点&#xff08;位置朝向&#xff09;cameraUp // 相机的"上方向"&#xff08;通…

Android RTMP推送|轻量级RTSP服务同屏实践:屏幕+音频+录像全链路落地方案

一、背景&#xff1a;从“移动终端”到“远程协作节点”&#xff0c;同屏音频录像为何成刚需&#xff1f; 在数字化办公、智慧医疗与远程教育等快速发展的推动下&#xff0c;手机作为随身终端&#xff0c;已不再只是“内容接收者”&#xff0c;而逐步成为远程信息发布与可视化…

NLP 和 LLM 区别、对比 和关系

理解自然语言处理(NLP)和大语言模型(LLM)的区别、对比和关系对于把握现代人工智能的发展非常重要。以下是清晰的分析: 核心定义 NLP (Natural Language Processing - 自然语言处理): 是什么: 一个广阔的计算机科学和人工智能子领域,致力于让计算机能够理解、解释、操作…

Altium 移除在原理图之外的元器件

Altium新手&#xff0c;最近在画原理图的时候&#xff0c;遇见了这种不小心拖到界面外的元器件&#xff0c;发现拖不回来了了&#xff0c;查阅了一下&#xff0c;总结在这里 官方推荐的方法----------------使用“SCH List”面板删除 链接&#xff1a;如何移除在原理图之外的元…