2024年最新有关QT的问题大全_为什么不推荐学qt(1),2024年物联网嵌入式开发常见面试题

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

如果你将自己局限于调接口就行,那你一辈子都注定是个底层码农。

现在 Qt 好找工作吗?

毕业工作以来在电力,军工,教育三个行业做开发工作,基本是在哪个行业开发就会涉及到一些新的技术,但是都是以qt为主来做的开发。比如从事电力做仿真,做socket通信,组态建模开发,跨平台linux下开发,qnx系统下移植,界面图表用到qwt,chartdirecter,脚本用了js,数据库用sqlite,DM;做军工工作,做了gis下仿真,军标标会,二三维仿真推演,qt集成osg,开发基于C++的仿真引擎,使用zeromq通信,数据库用sqlserver,开发分布式系统应用;做教育行业,做了嵌入式开发,技术涉及了指纹识别,人脸识别,图像识别,语音识别,用到opencv库,商业库,学了做Python脚本语言,通信用过redis消息队列,activemq,rabbitmq,数据库用到MySQL;基本上都是以qt做界面为主,需要用到别的技术再学习拿来用,但是都是熟悉能使用的程度,没有深入研究,电力和军工都是做项目,教育是产品,相比较做项目比较累,经常性的加班,但是工作一直饱满上班比较充实,一直可以写写代码研究问题,产品开发新产品还好,老产品就是做维护工作,工作量较小。


为什么工业软件开发一般用的都是QT?

说说个人的理解:

Qt不依赖图形系统。低端工控机的硬件配置可能是连一个图形系统都跑不起来的,而Qt可以直接写屏实现图形界面

其它不依赖图形系统的开发框架都比Qt弱。比Qt强的开发框架基本都依赖图形系统。

所以Qt就成为当下有现成解决方案中最强的开发框架了。

至于虚拟机,浏览器这些东西。。。你们觉得一个连图形系统都配置不起的嵌入式工控机会搭载浏览器跟虚拟机吗?java,python,html5等方案直接淘汰。

所以简单说:Qt对硬件配置要求极低。而C++性能又相对其他语言高,所以成为低配设备的首选。


补充一些内容吧:

就我司的情况而言,能跑安卓的机子基本都会考虑编个安卓上去。只有硬件配置低,跑不起来安卓的目标机才会用Qt开发。而能选型用Qt的目标机,基本上属于用Qt就是极限,根本不可能跑得动任何更大软件框架。

至于跑安卓有多简单,可能很多人没概念,大概就是绝大多数你选型的产商都可以给你提供立等可用的安卓选项,不用自己做的那种。

反倒是用Qt,对系统组的技术要求要高。毕竟系统组还要给你制作一套交叉编译的工具链,而安卓的工具链就是产商提供的现成的。对于有能力编译一整套工具链的系统组来说,质疑其技术能力是完全没有意义的,毕竟无论你是用啥编译器,人家连gcc,clang编译器本身都能重新编译出来,还能不懂你一个aot的编译?事实上,最终搭好环境后,搞虚拟机那些语言开发的程序员也不需要懂交叉编译,而搞Qt的开发就必须得懂交叉编译。

提升配置之后,java或者安卓逐渐会变为首选,但在有限配置下Qt依然为大,毕竟Qt强制了C++11的支持。这一点也有不少功劳。

初学QT怎么学?

话不多说,直接上干货

根据不同人的喜好,我将介绍三种学习qt的主流途径

我这里也说一下我个人比较喜欢的学习顺序

先看视频了解大概——>网页教程当作“字典”快速查找——>书作为辅助

视频:

对于初学者来说,我首先推荐看视频

直接说优点

1、最重要的一点,你看视频时可以看到演示过程的,这比你看网页和书都要直观。

2、看视频是可以倍速观看的,我一般都1.5倍速和2倍速看,缩短时间提高效率效果真的棒棒哒,非常适合想我一样阅读比较慢,可以听很快语速的人

3、视频课一般开始都会介绍一下整体框架的,可以快速有个大概的了解,也可以先做到心中有数,一般的网页教程和书的开头也会有类似的框架介绍,不过大家从小就适应了这种老师带的教学模式,看视频学起来可能会轻松一点

不过这里也有一些坑需要注意

在选择视频的时候需要看那些知识点密度比较大的来看。现在的Qt教学视频很多都是机构的内部教学视频的现场录制版,杂音比较大,而且会有挺多废话的,看的时候会有点效率不高的感觉。所以你在选择的时候不要觉得视频教程的全部时间越长就越觉得它说的知识点比较多,这是一个非常大的误区

然后视频去哪找应该不用我多说了,毕竟众所周知,B站是一个学习的地方,你想要的样子,他(她)都有哈哈哈。

如果你也懒得去自己找,用我推荐的也可以,下面推荐的是我看过觉得比较好的

推荐:

2020千锋_物联网_QT开发编程全套教程(通俗易懂)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com/video/BV1RA411q7Um?p=52img

这个教程是我看了B站上的qt视频之后觉得做的比较好的,时间也不是很长,视频质量也还不错,很适合快速入门

QT案例_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com/video/BV1xJ411M7E4?from=search&seid=6812846755768475295img

这是一个纯qt案例,结合上面的视频一起食用效果更佳。

网页教程

网页教程现在也挺多的,用来快速查找非常方便,你看过视频之后,时间长了有些东西怎么用你可能忘了,你这些网页教程里看看比翻书可能要快点,而且即查即用,代码还可以直接复制,真的很方便,谁用谁知道

不多说,直接上链接

《Qt 学习之路 2》www.devbean.net/2012/08/qt-study-road-2-catelog/

Qt教程,Qt5编程入门教程(非常详细)c.biancheng.net/qt/img

Qt 学习之路_w3cschoolwww.w3cschool.cn/learnroadqt/tufx1j3q.htmlimg

Qt 快速入门系列教程 · Qt 快速入门系列教程shouce.jb51.net/qt-beginning/

这里说一下,前三个链接主要侧重的是代码怎么写,后面一个链接侧重的是ui拖拽实现

书籍

推荐一本吧,名字叫:C++ GUI QT 编程

因为书不是我推荐的重点,上面推荐的视频和网页教程已经挺全面的了,书只是作为辅助,比如你网络不好,不方面带电脑的时候看看,不过这本书确实写得挺好的

书长这样

img

本来想给个PDF下载链接,不过想想,看PDF的还不如直接看网页的教程呢

请问目前做windows桌面应用程序,MFC、QT、C#哪个更好?

回答问题之前,先装个逼——没有主导过生命周期三年以上的桌面软件项目的,闭嘴。你连一个桌面软件项目的生命周期都没经历过,你凭什么做技术选型?凭信仰吗?

装逼结束,正文开始。

首先,非主流技术和过时技术先淘汰掉,包括但不限于:delphi、mfc、c++ builder、gtk+、java系、易语言……

最终入围的基本上就三种选择:Web、Qt、C#。

首先说Web,我们明确一点,当下的桌面软件项目,必须具备完整的Web能力(包括开发/部署/运行/测试等),直观的说就是你的软件中必须包含浏览器。尤其是企业软件,发展到后期,除了核心功能之外,必然附带大量的增删改查模块,这部分不用Web你会极其难受。有些人可能native用的挺熟练的,觉得不就是表格表单报表么?我用native一样堆出来——相信我,你在浪费生命。

Web必然入选,但是注意,Web入选不意味着electron入选。事实上如果不是互联网公司的项目,我不建议使用electron。一方面,传统公司不需要迭代那么快,他们前端力量也有限,出了问题解决不了;另一方面,哪怕是互联网项目,发展到后期,也不约而同地开始约束前端随意调用nodejs API的行为。

建议使用libcef提供Web能力,同时native封装有限的API供Web调用。这里我不推荐使用框架原生的webview,比如QtWebEngine,以及winform自带的WebBrowser组件,这些工具比较冷门,资料少,出了问题不好排查,而且浏览器内核版本也未必符合要求。

结论:libcef入选,electron淘汰,原生webview淘汰。

接下来考察C#和Qt,这两个技术各有支持者,不是非黑即白的关系。比如我看韦大的答案下面很多人在争论工控领域应该用Qt还是C#,其实国内工控领域的老大浙大中控,这两个技术都在使用。

我个人比较推荐Qt,极其强大,跨平台,可以用C++单一语言(调试成本低),还有一些很贴心的功能,比如基于qss的换肤。不要觉得换肤不重要,实际上做项目卖软件的公司经常遇到这样的需求,要么是甲方想用专有皮肤,要么是你接到的项目是OEM项目,中间商要求换肤。

但如果使用Qt,我不推荐使用Quick(Qml),太非主流,而且对比Web没什么优势。建议能用Web的模块就用Web,需要深度开发的模块使用QWidget配合OpenGL深度开发。

结论:Qt入选,但是Quick淘汰。

C#能有一席之地,主要是因为传统。有些领域长期以来就是使用C#开发,人才比较集中(C#人才确实比C++好招,而且便宜,也更不易跳槽),开发效率也确实高。如果没有跨平台诉求,也不是前瞻性很强的项目,可以考虑沿用C#(关于前瞻性,多说一句,新冷战都要来了,你确定你的项目不需要跨平台嘛)。

用了C#,还要选择是用winform还是用WPF,按理说这不该是个问题——无脑WPF就完事儿了,毕竟开发效率高,对于高分屏等新问题微软也会有相应的支持。但是什么问题只要涉及到“传统”,就说不清楚了,只能说如果是新产品,不考虑技术资产继承的话,建议WPF。

结论:WPF入选,winform你看着办。

综上,如果是我来作架构师,通常情况下我会选择Qt+libcef。兼顾强大功能与开发效率,同时Qt和Web前端都是前景光明的主流技术,社区力量强大,技术风险小。如果考虑到特定行业的技术积累(不光是你自己的积累,还有供应商等等)和人才招聘,可以考虑WPF+libcef。


如何才能学到Qt的精髓?

被邀请了很久了,一直在思考,今天终于下决心开始写回答。

这个问题的确是够大的,Qt的代码规模在整个开源世界里也是名列前茅的,这么大的项目其中的精华是非常多的,很难说得全面,实际上我对Qt也不是完全了解,里面还有很多我不熟悉的东西。

首先,我想谈的是 signal/slot,Qt算是发明了signal/slot,这个思想也被其他一些框架语言借鉴了。

谈signal/slot之前先来谈谈C++的缺欠,这个问题也被讨论很多了,这里只谈一点,C++的设计目标是面向对象语言,它不仅提供了对象的定义和构建的方式,也定义了对象间的关系,比如 继承 派生 聚合,但是它没有提供对象间通信和共享数据的方式,这个缺点在一般程序的开发上不算个大问题,我们可以自己简单实现,但是对于GUI开发,这个缺点就被放大了很多倍。GUI上的对象实在太多,窗口是对象,布局是对象,定时器是对象,而且对象间有错综复杂的关系,通信和数据交换非常频繁,比如按钮按下要通知父窗口或容器对象,滚动条变化了要通知列表对象。这种数量庞大的对象以及复杂的通信关系,可不是自己搞个简单的实现就能解决的。

说到通信和共享,其实他们是一回事,共享很多时候就是为了通信,而C++里要通信就必然要共享。

比如,一个类实例拥有另一个的指针,就可以访问对方的数据,调用对方的方法了,这实际就是共享了一个指针,这个类指针也是另一个对象的this。访问数据和调用方法其实都是通信,把对方的数据拿过来,把自己的数据送过去,交换数据就是通信。

在C++里,由于没有GC,管理大量原生指针是极其危险的,对象的生命周期不可控,野指针的出现概率会很高,大型C++ 的GUI项目参与开发的人数众多,很难保证都不犯错。

那么用观察者模式呢?其实也一样,还是共享了IObserverXXX指针。

那么发消息行不行呢?比如 MFC那样,可以,但是本质上还是共享了窗口句柄,否则消息发给谁呢?而且还带来另外的问题,就是类型安全,消息的参数是无法类型安全的。

Qt作为大型GUI项目的Framework,它必须解决这个问题,否则这个程序是写不大的,写大了就会问题层出不穷。

来看一段代码,看看Qt 的解决方案:

Window::Window()
{
    QPushButton \*b = new QPushButton(this);
    connect(b, SIGNAL(clicked()), SLOT(on\_button\_clicked()));
}

Window::on\_button\_clicked()
{
    QPushButton \*b = qobject\_cast<QPushButton\*>(sender());
    b->setText("clicked!");
}

这段代码,通过Qt的signal slot机制,把QPushButton的点击事件连接到了Window的on_button_clicked响应函数上。

Window 和 QPushButton并没有互相保存对方指针,QPushButton的指针b 只是个局部变量,用过之后很快销毁,Window和QPushButton实现了通信,数据共享,事件响应,但是却没有共享指针,而且他们不受对方的生命周期影响,无论谁先销毁,这段代码都不会出错。

这种方式还是类型安全的,当signal和slot的类型不匹配的时候 connect是会报错的。

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。**
[外链图片转存中…(img-KdWeXLTl-1715646185231)]
[外链图片转存中…(img-vj1FTB5D-1715646185234)]

如果你需要这些资料,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值