Qt

Qt 内存管理 机制
https://www.cnblogs.com/rednodel/p/9300729.html
Qt 信号槽 和 回调函数的区别
回调函数的本质是“你想让别人的代码执行你的代码,而别人的代码你又不能动”这种需求下产生的。

回调函数是函数指针的一种用法,如果多个类都关注某个类的状态变化,此时需要维护一个列表,以存放多个回调函数的地址。对于每一个被关注的类,都需要做类似的工作,因此这种做法效率低,不灵活。
Qt信号与槽机制降低了Qt对象的耦合度。
信号槽 信号发送者不需要知道信号接收者的信息
类型安全 相关联的信号槽参数必须匹配才可以 任意类型 任意参数
QT:
1:QT信号槽机制的优缺点 :
1)QT信号槽机制的引用精简了程序员的代码量 (不用写回调函数)
2)QT的信号可以对应多个槽(但他们的调用顺序随机),也可以多个槽映射一个信号
3)QT的信号槽的建立和解除绑定十分自由
4)信号槽同真正的回调函数比起来时间的耗损还是很大的,所有在嵌入式实时系统中应当慎用
5)信号槽的参数限定很多例如不能携带模板类参数,不能出现宏定义等等

2、多线程情况下, Qt中的信号槽分别在什么线程中执行, 如何控制?

可以通过connect函数的第五个参数来控制, 信号槽执行时所在的线程

1)自动连接(AutoConnection),默认的连接方式,如果信号与槽,也就是发送者与接受者在同一线程,等同于直接连接;如果发送者与接受者处在不同线程,等同于队列连接。
2)直接连接(DirectConnection),当信号发射时,槽函数立即直接调用。无论槽函数所属对象在哪个线程,槽函数总在发送者所在线程执行,即槽函数和信号发送者在同一线程
3)队列连接(QueuedConnection),当控制权回到接受者所在线程的事件循环时,槽函数被调用。槽函数在接受者所在线程执行,即槽函数与信号接受者在同一线程

3、描述QT中的文件流(QTextStream)和数据流(QDataStream)的区别, 他们都能帮助我们完成一些什么事情.
QTextStream – 文本流, 操作轻量级数据(int, double, QString), 数据写入文件中之后以文本的方式呈现。
QDataStream – 数据流, 通过数据流可以操作各种数据类型, 包括类对象, 存储到文件中数据可以还原到内存。
QTextStream, QDataStream可以操作磁盘文件, 也可以操作内存数据, 通过流对象可以将数据打包到内存, 进行数据的传输.

4、描述Qt下Tcp通信的整个流程
具体解释 :https://www.cnblogs.com/yuweifeng/p/9382841.html

QT如果要进行网络编程首先需要在.pro中添加如下代码:QT += network

服务器端:

  1. 创建用于监听的套接字
  2. 给套接字设置监听
  3. 如果有连接到来, 监听的套接字会发出信号newConnected
  4. 接收连接, 通过nextPendingConnection()函数, 返回一个QTcpSocket类型的套接字对象(用于通信)
  5. 使用用于通信的套接字对象通信
    1>. 发送数据: write
    2>. 接收数据: readAll/read
    客户端:
  6. 创建用于通信的套接字
  7. 连接服务器: connectToHost
  8. 连接成功与服务器通信
    1>. 发送数据: write
    2>. 接收数据: readAll/read

6、描述QT下udp通信的整个流程

QT下udp通信服务器端和客户端的关系是对等的, 做的处理也是一样的.

  1. 创建套接字对象
  2. 如果需要接收数据, 必须绑定端口
  3. 发送数据: writeDatagram
  4. 接收数据: readDatagram

7: 描述QT下多线程的两种使用方法, 以及注意事项
第一种方法:

  1. 创建一个类从QThread类派生
  2. 在子线程类中重写 run 函数, 将处理操作写入该函数中
  3. 在主线程中创建子线程对象, 启动子线程, 调用start()函数
    第二种方法:
  4. 将业务处理抽象成一个业务类, 在该类中创建一个业务处理函数
  5. 在主线程中创建一QThread类对象
  6. 在主线程中创建一个业务类对象
  7. 将业务类对象移动到子线程中
  8. 在主线程中启动子线程
  9. 通过信号槽的方式, 执行业务类中的业务处理函数
    多线程使用注意事项:
    1. 业务对象, 构造的时候不能指定父对象
    1. 子线程中不能处理ui窗口(ui相关的类)
    1. 子线程中只能处理一些数据相关的操作, 不能涉及窗口

Qt信号槽的实现原理其实就是函数回调,不同的是直连直接回调、队列连接使用Qt的事件循环隔离了一次达到异步,最终还是使用函数回调

moc预编译帮助我们构建了信号槽回调的开头(信号函数体)和结尾(qt_static_metacall回调函数),中间的回调过程Qt已经在QOjbect函数中实现
signals和slots就是为了方便moc解析我们的C++文件,从中解析出信号和槽
信号槽总共有5种连接方式,前四种是互斥的,可以表示为异步和同步。第五种唯一连接时配合前4种方式使用的
信号和槽本质上是一样的,但是对于使用者来说,信号只需要声明,moc帮你实现,槽函数声明和实现都需要自己写
connect方法就是把发送者、信号、接受者和槽存储起来,供后续执行信号时查找
信号触发就是一系列函数回调

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值