文章目录
一、QT部分
1.Qt信号和槽的本质是什么
回调函数。
2.Qt信号槽机制的优势和不足
优点:类型安全,松散耦合。缺点:同回调函数相比,运行速度较慢。
3.Qt connect 函数的连接方式
- Qt::AutoConnection: 默认值,使用这个值则连接类型会在信号发送时决定。如果接收者和发送者在同一个线程,则自动使用Qt::DirectConnection类型。如果接收者和发送者不在一个线程,则自动使用Qt::QueuedConnection类型。
- Qt::DirectConnection:槽函数会在信号发送的时候直接被调用,槽函数和信号发送者在同一线程。emit语句后面的代码将在与信号关联的所有槽函数执行完毕后才被执行。
- Qt::QueuedConnection: emit语句后的代码将在发出信号后立即被执行,无需等待槽函数执行完毕
- Qt::BlockingQueuedConnection:槽函数的调用时机与Qt::QueuedConnection一致,不过发送完信号后发送者所在线程会阻塞,直到槽函数运行完。而且接收者和发送者绝对不能在一个线程,否则程序会死锁。在多线程间需要同步的场合可能需要这个。
- Qt::UniqueConnection:可以与以上四个结合在一起使用,当某个信号和槽已经连接时,再进行重复的连接就会失败。也就是为了避免重复连接。
4.信号的注意点
- 所有的信号都没有返回值.
- 所有的信号都不需要定义。
- 在同一个线程中,当一个信号被emit发出时,会立即执行其槽函数,等槽函数执行完毕后,才会执行emit后面的代码,如果一个信号链接了多个槽,那么会等所有的槽函数执行完毕后才执行后面的代码,槽函数的执行顺序是按照它们链接时的顺序执行的。不同线程中(即跨线程时),槽函数的执行顺序是随机的。
- 信号与槽机制要求信号和槽的参数一致,如果不一致,允许的情况是槽函数的参数比信号的少,即便如此,槽函数存在的那些参数的顺序也必须和信号的前面几个一致起来。(槽函数的参数比信号的多,这是不允许的)
5.Qt 实现多线程
两种基本方式,一种是QObject继承,将对象MoveToThread(&QThread),
另一种是继承QThread,并重写run方法。
6.QT多线程使用注意事项:
- 业务对象, 构造的时候不能指定父对象
- 2.子线程中不能处理ui窗口(ui相关的类)
- 子线程中只能处理一些数据相关的操作, 不能涉及窗口
7.TCP:
三次握手:建立一个TCP连接时,需要客户端服务端总共发送三个包以确认连接的建立。
.四次挥手:断开一个Tcp连接时,需要客户端和服务端总共发送四个包以确认连接的端口。
8.OpenCV的Mat对象怎么使用Qt显示出来的:
- 将Mat转为QImage
- 将QImage转为QPixmap
- 将QPixmap放到QLabel上并显示出来