序言:
我的任务的主要是处理所涉及的rviz移植项目的前端界面,这部分需要使用qt来完成,但是我之前对于这部分的知识有所欠缺,所以需要从头开始学习准备。
在学习的过程中,我将所遇到的困难、学习到的技巧和重点知识以及解决的问题的记录在博客里。
0 准备阶段
配置环境:
qt的开发工具是qt creator,但是下载之后还不能正常运行,需要配置相关的开发环境。
在linux环境下配置要比在windows容易一点……
windows安装失败:缺少kit环境,解决方法:下载windows环境kit,Microsoft官网;解决起来很复杂。
在服务器安装失败:因为疫情封校,需要远程操作服务器,但是不能够正常安装,查阅资料之后是vnc的问题;Qt的安装需要图形化界面,直接跳过这一阶段即可。
虚拟机linux环境:重要的是g++编译器需要安装,不然仍然不能够正常建立项目,需要再根据报错下载相应的工具或是更改项目的路径。
1 qt简介:
- 一个跨平台的 c++ 开发库,主要用来开发GUI
- 纯C++开发,当然也有python和Ruby等语言的绑定,但是我们优先选择c++
- 支持多种操作系统,包含了windows,Linux和Unix以及android和iOS,嵌入式的QNX和VxWorks?
- 有开源版本;
- 尽管有Qml标记语言,但是仍然建议C++为主:考虑到功能的完善性
2 学习1 基本概念
建立第一个QT程序后,学习各个文件的意义:pro、cpp、h。
重点掌握其中代码的含义;
基本控件的操作函数;按钮
对象树:构建的创建和析构属于类和对象的概念范围;不用管理释放的操作;
(因为用cpp不是很多,主要用的java,这里不太理解内存管理,实际上这个点算是cpp的一个重点,这里需要再加深学习一下,文末附了一篇讲解的很详细的博客。不过总之,这里的介绍就是不用非常注意qt里的内存管理,有对象树来帮助解决问题。)
3 学习2 重点:信号和槽
控件:exp. 按钮
事件:exp. 鼠标点击、键盘输入等
信号和槽是用来实现事件的处理;
connect(发送者,发送的信号,信号接受者,处理的槽函数)
发送的信号的格式:函数的地址::信号
ps:发送的信号signal从帮助文档中查阅,常见的有clicked,toggled;
slots的槽函数同理;
当然,也可以自定义信号和槽;
qt creator会自动给出空的signals和slots,我们可以在里面写出;
singals,返回值viod,可以有参数可以重载,不需要实现,只声明即可;
slots,返回值void,需要实现;
emit函数;
自定义信号的重载:
信号和槽需要取明确的指针的地址;
void(类::信号)(类型)= &类::信号
信号的参数个数要和槽函数的个数一一对应;
这里信号的参数个数也可以多于槽函数的参数;
信号连接信号;
connect(发送方,发送的信号,发送方2,发送的信号2)
connect(发送方2,发送的信号2,接受方,接受的槽函数)
实现了了中介;发送方2相当于过度者;
以此类推,也可以多个信号连接一个槽函数,或是一个信号连接多个槽函数;
这个地方的connect函数还可以拓展使用,可以在具体实践的时候进一步学习;
disconnect函数,可以断开信号;
参考资料:
Failed to initialize Xrander___pop_的博客-CSDN博客
Qt编程指南,Qt新手教程,Qt Programming Guide (ustclug.org)
Qt教程,Qt5编程入门教程(非常详细) (biancheng.net)
C++内存管理(超长,例子很详细,排版很好)_草根caogen的博客-CSDN博客_c++ 内存管理