[虚心求教] 关于前端研发如何以正确姿势入门 C++以及 Qt 框架

244 天前
 0829ewlLuna

如题,最近司内的桌面端需求需要转向 Qt 框架,作为一个只接触过 Electron 的前端研发,目前需要学习相关的语言和框架知识,求问各位大佬以及巨佬们,能给我指一条学习路线吗?目前在看油管 Cherno 大佬的 C++入门课程以及组内大佬分享的 Qt 课程,但是自己还是想先列一个计划,规划一下优先学习、重点学习以及可以稍微放一放的内容。

求大佬们不吝赐教哇~

2109 次点击
所在节点    程序员
27 条回复
tool2d
244 天前
B 站有游戏开发者,大家都说 C++有用,就转头学了 2 个月。两个月后,发现很难学以致用,还是放弃了。选择了脚本语言。

如果只是为了写一个桌面 APP ,有太多别的语言可供选择。

硬转技术路线挺尴尬的,那些写 C++的,很多都是轮子向,都是好多年的积累和习惯。学 C++和前端不一样,学习曲线很陡,得不到很明显的反馈。
Curtion
244 天前
https://learnxinyminutes.com/ 过一遍语法,然后直接开始动手写, 当然是问 ChatGPT 来操作
byasm32
244 天前
找个体量合适的目标,直接复刻,边做边学,进步最快。
纯个人建议。
centralpark
244 天前
直接 PyQt 啊,整啥 C++
Nosub
244 天前
把《 C++ GUI Qt4 编程》这本书买回来反复阅读,基础知识不够的可以补充下《 C++ Prime PLUS 》,这样就足够了,这本书《 C++ GUI Qt4 编程》虽然讲的是 QT4 ,不过依然是市面上最好的关于 QT 的书籍,因为是 QT 官方团队写的。
listenerri
244 天前
Qt 的官方文档已经足够了(英文的),下载 QtCreator 也就是 Qt 官方 IDE ,就开始吧,里面有各种 demo

Qt 能称之为框架是因为 Qt 内部封装好了大量内容,基本上可以当作一门独立的语言来学习,入门学习可以不管 c++,把 c++ 看作是底层/内部实现(当然以后肯定免不了接触 c++ 的,但目前不要被 c++ 挡住学习的脚步,毕竟它公认的难学难用)

如果你没有 c/c++ 底子,更不建议从 c++ 开始学习入门 Qt ,直接学 Qt 里的东西就行了

还有,Qt 早就推出了 Qt Quick 模块(现在已经成熟了),从用法来看是完全独立于以前的 UI 实现模块 QWdiget 的,且对 UI 实现更友好简单,使用时的语言也不是 c++ 了,而是非常类似 js 的 qml 语言,我认为从 Qt Quick 入门应该更适合你
masterclock
244 天前
用 QML 写界面,用 python 写其他部分
objcat
244 天前
pyqt5 pyside2
maxxfire
244 天前
公司用 qt ,是不是要付费购买
NoOneNoBody
244 天前
有 web 基础的话,做界面不难
qt 可以用 qss ,和 css 有 90%相似,web 前端应该上手很快

难在交互
webUI 和传统客户端 GUI 的区别
1. webUI 是一次提交,GUI 看上去也是一次提交,但实际可能每个控件都有交互,例如 单选按钮可能都要做一次小交互
2. qt 交互需要信道,界面控件发送信号(可以理解为参数),后端接收并处理,所以前后端都要懂,一次交互可以简单理解为一个 xhr (当然这样说不严格),qt 的信号槽要学好
1) webUI 是从提交到界面变化顺序执行,没有界面冻结的概念; GUI 则是界面和程序同时执行,如果顺序执行的话,界面会“冻结”不能操作,俗称“卡”,所以还要懂多线程操作,qthread 算是基础
2) webUI 可以全页面刷新,全换掉也行,GUI 一般只是数据刷新,很少换界面结构,如果界面布局全变一般是切换而不是刷新,就是预作多个界面,切换 focus
3) webUI 的“等待”,用户是可以理解的,一般都默认在等网络传送; GUI 的“等待”,用户是不能理解的,他们默认却是“死机”了,所以做长时间的数据处理时,界面要添加“小动作”,例如滚动条或状态栏定时提示,消除用户的不耐烦
3. webUI 事件很少,一般都是点击、下拉; GUI 事件很多,很复杂,例如比较难的有拖放,树控件操作

建议顺序
1.界面控件 widget 和布局 layer ,不用急着弄整齐漂亮,反正可以 qss 完成(各个控件有名字和 class 属性,以后补上就是了)
PS: 初学时,见到名字是 View 结尾或者 Abstract 开头的控件,一律避开,这些属于自定义控件,没有基础就算看文档都会一团乱麻
2.主窗口的关闭、程序的退出(注意在 QT 这是两件事)
3.控件的 connect ,就是发送信号,以及函数怎么接收
4.qthread ,后台线程,先做简单的,例如接收 a ,直接返回 b 就够了,重点是搞清楚进出流程和信号的收发

先做只有一两个 widget 窗口,完成一件事,例如点击按钮在另一个控件显示文字
复杂的界面,就是上述 1/3/4 的组合,当然也有多个 1+一个 3/4
插入、显示图片这些可以先放一放,先学好纯文字,图片这些某角度看,属于媒体文件,qt 需要做一些相关处理
表格、树这些都是复杂的控件,它们之间甚至可以互相引用(混用),因为里面的每个单元格也是一个小型控件,也有相关的点击、选择、按键、拖放……等等,而且数据刷新也复杂(排序之类),整体思路和其他基础控件不同,不要急着搞
qtweb 相关的东西,虽然形式上也是个控件,但实际是个浏览器内核,显示出来倒是简单,但处理其中的网页数据就要另外专门学了,涉及网络、html 分析……
子窗口、新开窗口就更加不用说了,我至今都能避则避,以后有时间再说
界面和数据之间的桥梁 proxy ,我至今没学会

qt 的状态机可以在搞懂布局和信号之后学,初级的状态机不难学,就是预设好一堆参数而已,这东西很好用,有些固定的状态,设好每个状态的参数,扔进去靠它控制;例如,几个单选按钮,引起界面的小变化(不涉及计算,例如颜色变化),就把这些小变化不同的值扔进状态机,各自标记为某个状态,单选按钮用 connect 发信号(状态的标识)给这个状态机让它来换状态就行了

暂时想到这些……

这里有 chm 格式的文档(非官方,但也是用官方文档网页版打包的)
https://github.com/vzhd1701/qt-documentation-chm-autoupdated
knva
244 天前
用 pyside 吧 。
nevermoreluo
244 天前
我自己没写过,不过有几个古老的项目会有维护需求
学我没啥建议,有些坑你可以避一下

逻辑和界面尽量拆开来写,如果逻辑生成一个独立的模块就最好了,在 qt 里面 link 后调用逻辑的方法就好了。(如果可能后续还能拆掉 qt ,逻辑不用动....

日志这些 io 模块异步很重要(老的有些项目直接同步写文件,卡哭),即使初始没有异步,模块化也很重要,之后好改。
总的来说界面这东西,小公司我不太看好 Qt ,除非组里有很多人都是用 Qt 的 XD :(
cnuser002
244 天前
桌面程序开发,我觉得最好的入门方式,还是先直接写一个简简单单的小程序,把正式开发时,会接触到的各个地方,先打个照面。就像玩游戏,首先一点点把地图探开,建立传送点。以后跑图做任务就方便了。

比如最开始,放上一个按钮,放上一个 label ,实现点一下 label 显示的数字+1 。这个程序做完,知道控件怎么放进窗口里,变量保存在哪里,如何引用和修改,点击事件如何绑定到控件上。

接着,不用按钮,程序里面跑一个死循环,让这个 label 自己+1 。你会知道在哪里执行这种任务,又如何与 UI 那边交互。

这一步走通了,你就可以再进一步,刚刚是个死循环,现在我换成发送一个 HTTP 请求,收到报文,内容显示到 label 里。涉及到库文件的安装和引用,网络通信,Json 解析等内容。

这部分走通后,开发一个像网页那样获取内容的 GUI 应用,就知道大体怎么做了。

这样我觉得就算入门了。
liberize
244 天前
用 QML 不要用 Widget
ysc3839
244 天前
啥需求?为啥不用 Electron ?
sosilver
244 天前
有前端人员,建议用 qml 。声明式界面+JavaScript 上手难度低、效率高,表现力也很强。
putaozhenhaochi
244 天前
c++得喝一壶
0829ewlLuna
242 天前
@ysc3839 原本用的就是 Electron ,但是 Electron 的内存占用问题一直是个老大难,随着业务迭代加快,这问题日渐严重,且由于我只是个业务仔,突然接入框架的学习,是有些不熟悉的,所以我这边得知切换框架的原因大概是这样哈
0829ewlLuna
242 天前
@putaozhenhaochi 已经有体会了,瑟瑟发抖
0829ewlLuna
242 天前
@Nosub 好的好的,谢谢大佬

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/971975

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX