QT:面试总结

前言

参考link

Q&A

1.为什么要用 qt 来做界面

  • Qt的 跨平台性很强,比如同样一套代码写好 pro 文件可以在 windows / linux / Android 等 直接编译。

2.Qt信号和槽的 本质

  • 回调函数

3.Qt 信号槽机制的 优势

相比回调函数:

  1. 类型安全:需要关联的信号和槽的签名必须是等同的,即 信号 和 槽的参数类型 和 参数个数相同。不过,槽的参数个数是可以少于信号的参数个数的,但 缺少的参数必须是信号参数的最后一个 或 后几个参数。如果信号和槽的签名不符,编译器就会报错。
  2. 松散耦合激发信号的 Qt 对象无需知道是哪个对象的哪个槽需要接收它发出的信号,它只需在适当的时间发送适当的信号就可以了,而 不需要知道也不关心它的信号有没有被接收到更不需要知道是哪个对象的哪个槽收到了信号。同样的,对象的槽也不知道是哪些信号关联了自己,而一旦关联信号和槽,Qt 就保证了适合的槽得到了调用。即使关联的对象在运行时被删除,应用程序也不会崩溃
  3. 信号和槽机制增强了对象间通信的灵活性一个信号可以关联多个槽也可以多个信号关联一个槽

4.Qt 信号槽机制的 不足

相比回调函数:信号和槽机制运行速度有些慢;通过 传递一个信号来调用槽函数 比 直接调用非虚函数运行速度慢10倍原因如下:

  • 需要 定位接收信号的对象
  • 安全地 遍历所有的关联(如:一个信号关联多个槽的情况)
  • 编组 / 解组传递的参数
  • 多线程 的时候,信号可能需要排队等待

然而,与创建对象的 new 操作及删除对象的 delete 操作相比信号和槽的运行代价只是他们很少的一部分。信号和槽机制导致的这点性能损耗,对实时应用程序是可以忽略的。

5.connect 有几种连接方式

  • 直接连接、队列连接、自动连接(Direction、queued、blockingqueued、unique、auto)

5.多线程下,信号槽分别在什么线程中执行,如何控制

  • 可以 通过 connect 的第五个参数 进行控制 信号槽执行时所在的线程
  1. 直接连接:信号和槽,都在 信号发出者所在的线程中执行

  2. 队列连接:信号,在信号发出者所在的线程中执行;槽函数,在信号接收者所在的线程中执行

  3. 自动连接:多线程:时为队列连接函数单线程:时为直接连接函数

6.qt多线程

两种基本方式:

  • 一种是 QObject继承将对象 MoveToThread(&QThread)
  • 一种是 QThread继承,并 重写 run 函数,调用 start() 函数 启动子线程

7.QTL

  • qt 容器&
  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值