文章目录
- 前言
- Q&A
-
- 1.为什么要用 qt 来做界面
- 2.Qt信号和槽的 本质
- 3.Qt 信号槽机制的 优势
- 4.Qt 信号槽机制的 不足
- 5.connect 有几种连接方式
- 5.多线程下,信号槽分别在什么线程中执行,如何控制
- 6.qt多线程
- 7.QTL
- 8.qt如何显示图片
- 9.show() 和 exec() 的区别
- 10.实现一个自定义按钮, 使其在光标进入,按下,离开三种状态下显示不同的图片
- 11.QT中的文件流(QTextStream) 和 数据流(QDataStream)的区别
- 12.描述QT下udp通信的整个流程
- 13.用 C++ 模拟 Qt 信号和槽
- 14.qt tcp通信
- 15.qt发送图片
- 16.qt connect
前言
Q&A
1.为什么要用 qt 来做界面
- Qt的 跨平台性很强,比如同样一套代码写好 pro 文件可以在 windows / linux / Android 等 直接编译。
2.Qt信号和槽的 本质
- 回调函数
3.Qt 信号槽机制的 优势
相比回调函数:
- 类型安全:需要关联的信号和槽的签名必须是等同的,即 信号 和 槽的参数类型 和 参数个数相同。不过,槽的参数个数是可以少于信号的参数个数的,但 缺少的参数必须是信号参数的最后一个 或 后几个参数。如果信号和槽的签名不符,编译器就会报错。
- 松散耦合。激发信号的 Qt 对象无需知道是哪个对象的哪个槽需要接收它发出的信号,它只需在适当的时间发送适当的信号就可以了,而 不需要知道也不关心它的信号有没有被接收到,更不需要知道是哪个对象的哪个槽收到了信号。同样的,对象的槽也不知道是哪些信号关联了自己,而一旦关联信号和槽,Qt 就保证了适合的槽得到了调用。即使关联的对象在运行时被删除,应用程序也不会崩溃
- 信号和槽机制增强了对象间通信的灵活性。一个信号可以关联多个槽,也可以多个信号关联一个槽
4.Qt 信号槽机制的 不足
相比回调函数:信号和槽机制运行速度有些慢;通过 传递一个信号来调用槽函数 比 直接调用非虚函数运行速度慢10倍。原因如下:
- 需要 定位接收信号的对象
- 安全地 遍历所有的关联(如:一个信号关联多个槽的情况)
- 编组 / 解组传递的参数
- 多线程 的时候,信号可能需要排队等待
然而,与创建对象的 new 操作及删除对象的 delete 操作相比,信号和槽的运行代价只是他们很少的一部分。信号和槽机制导致的这点性能损耗,对实时应用程序是可以忽略的。
5.connect 有几种连接方式
- 直接连接、队列连接、自动连接(Direction、queued、blockingqueued、unique、auto)
5.多线程下,信号槽分别在什么线程中执行,如何控制
- 可以 通过 connect 的第五个参数 进行控制 信号槽执行时所在的线程
-
直接连接:信号和槽,都在 信号发出者所在的线程中执行
-
队列连接:信号,在信号发出者所在的线程中执行;槽函数,在信号接收者所在的线程中执行
-
自动连接:多线程:时为队列连接函数;单线程:时为直接连接函数。
6.qt多线程
两种基本方式:
- 一种是 QObject继承,将对象 MoveToThread(&QThread)
- 一种是 QThread继承,并 重写 run 函数,调用 start() 函数 启动子线程
7.QTL
- qt 容器&