Qt学习必经之路

作者:诸葛不亮
链接:https://www.zhihu.com/question/48999615/answer/114502935
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

百行代码胜过纸上千言,上手写就行
Qt的文档足够丰富,demo也很详尽(虽然主要是GUI部分),再不济还有众多的博客文章可以查询
答主是机械专业本科毕业生,想用Qt开发智能机器远程维护系统,那么用得到的组件我就大致列举如下吧,可以试试参照着demo、文档之类的写一写试试

QtCore组件:
QByteArray——字节数据处理,类似c里面的PUCHAR buffer
QList、QMap、QHash、QPair、QVector——常用数据容器,建议先阅读Qt文档里的Container Classes部分了解其中的差异
QString——字符串处理,不多说了。对了,QString内部统一使用Unicode
QDebug——Qt的命令行信息输出类,更常用的是qDebug()宏,支持c语法和c++的流操作语法
QIODevice——Qt所有涉及到硬件I/O的组件的统一基类,为所有硬件I/O提供了统一的接口。在使用各类I/O组件前,建议通读这个类的文档
QTimer——跨平台的定时器模块,提供通用精度和高精度定时器功能
QThread——跨平台的线程模块,支持线程优先级自定义
QMutex——跨平台的互斥锁模块,虽然Qt的多线程应用完全可以全程无锁……
QFileInfo、QDir——提供对文件系统的管理操作,其中QFileInfo很常用,可以把各种格式的路径(正斜杠、反斜杠、双斜杠、相对路径、绝对路径)转化为标准格式的绝对路径
QFile——文件操作类
QTextStream——类似std::iostream,提供对文本信息的流操作,可以直接作用于QFile、QIODevice、QString等对象上
QDataStream——提供平台无关,内容统一,基于流操作的,用于传输二进制数据的类。这个在标准库里都没能完全支持,真心好用

QtNetwork组件:
QTcpServer/QTcpSocket——TCP套接字,性能没有直接用socket底层编程,或者用IOCP、ASIO这类高端技术的好,但胜在封装层次高,API简单易用人性化。如果对端的机子是工控机等,能运行类似Ubuntu等linux系统的话,可以考虑用网络方式进行通信
QUdpSocket——UDP套接字,由于UDP是无连接的,所以没有专门的Server类来进行监听,服务端客户端是同一套接口

QtSerialPort组件:
QSerialPort——串口通信组件,适合用来与传感器等,基于RS485/RS232的方式传输数据的硬件设备进行通信

QtSerialBus组件:
用于处理工业级串行总线的通信协议,如CAN总线、ModBus等。此组件在目前最新的Qt 5.7中属于Technique Peview,尚未成熟,可能会有问题

QtSensors、QtNFC、QtBluetooth、QtPositioning组件:
QtSensors组件是为重力感应、旋转感应、光线感应、温度感应等常见的出现在手机等移动设备上的传感器提供支持的组件
QtNFC,顾名思义,提供NFC支持
QtBluetooth,蓝牙组件
QtPositioning,提供定位服务的支持
以上组件都需要操作系统相应驱动的支持。如果是在手机上,应该能直接用。如果是智能硬件这种,需要开发者进行驱动支持的平台,可能得用针对驱动编写Qt插件的方式进行接入,这几个组件是近几个版本才加入的,我没有具体了解过,详见文档

QtWidgets组件:
如果需要图形界面的话,可以用QtWidgets写界面,基于信号槽进行前后台通信会很方便,而且也容易上手

QtQuick组件:
包括QtQuick、QtQml、QtQuickControl等一系列工具,使用脚本的形式描述界面,界面渲染性能高,开发效率高,但坏处是语法和C++不同,更偏向于JS的语法,有一定上手难度。如果是智能硬件上需要界面,而且是触控型的界面,那么很适合用Qt Quick做

QtSql组件:
数据库组件,在答主涉及的领域里,很适合使用SQLite——在嵌入式领域应用广泛的关系型数据库。
那么常用的类主要有三个:
QSqlDatabase——管理数据库连接的类,作为全局的数据库引擎为其他数据库操作提供支撑
QSqlQuery——数据库查询类,提供基于Sql语法的query操作
QSqlTableModel——数据库表格模型类,可以很方便的把数据库的一张表直接对应到界面的TableView控件中,实现类似SQLite Expert之类的,数据库编辑器的功能

以上是在题主涉及领域中,最可能用到的功能

——————————————————————

以下是具体该从哪些角度上手:
1、对于零基础的,先从Hello World开始,再从默认的Qt Widget Application工程入手,逐步了解Qt的相关接口。
2、通过QTimer编写定时循环的程序,初步了解信号槽机制和Qt的基于事件响应的运行模式——Qt极度不推荐写while(true)之类的死循环,而是通过信号槽进行事件响应,通过QTimer进行循环工作。
4、通过Qt Widgets界面框架编写图形程序,逐渐熟悉信号槽机制,并了解如何编写简单的界面。例:带按钮的窗口,通过按钮触发各类前后台动作。
5、通过QFile、QFileInfo、QDir、QTextStream等,熟悉文件系统的运作
6、通过QThread编写带子线程的应用,通过信号槽进行跨线程通信——尽可能不进行任何跨线程直接调用,然后直观的感受信号槽和Qt线程的运作机制,体验不用互斥锁就能写数据安全的多线程应用的快乐。例:生产者/消费者模式,生产者不断生成数据,通过信号槽推送至消费者线程,然后进一步扩展,尝试一对多、多对一等方式。
7、通过QSqlDatabase、QSqlQuery,结合SQLite数据库,熟悉数据库操作
8、通过编写一个简单的C/S程序,熟悉网络操作,以及更重要的,熟悉QIODevice这套I/O机制。例:Echo程序,客户端启动后连接到服务端,用户输入信息,服务端接收到后返还一模一样的内容。
9、了解QIODevice机制,和基于事件响应的编程模式后,可以尝试通过QSerialPort和串口设备通信,比如弄个环境监测程序,通过定时器周期性采集温度传感器、湿度传感器、气压传感器、凤速传感器等的数据,并在界面实时展示,并记录在数据库中。
10、再然后就很随意了,到这一步,所积累的知识已经足够支撑编写答主所需的东西了——而且已经不仅仅只是大学课程设计那么简单,而是能足够在工作中实际运用,开发产品的技术

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值