IT评测·应用市场-qidao123.com

标题: Qt常见口试题合集 [打印本页]

作者: 何小豆儿在此    时间: 2025-3-14 09:21
标题: Qt常见口试题合集

零、基本概念

什么是信号槽?

信号槽雷同于软件计划模式中的观察者模式,(观察者模式是一种对象行为模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到关照并被自动更新。)被观察者发出的信号(signal),观察者收到自己注册监听signal,就通过槽(slot)关联的槽函数function实现动作操纵。
信号槽的优缺点

(1)类型安全
信号的参数类型、参数个数需要和槽函数的参数类型和参数个数划一。槽函数的个数可以少于信号的参数个数,但缺少的参数必须是信号参数的最后一个或最后几个。
(2)疏松耦合
信号发送者不需要知道发出的信号被哪个对象的槽函数吸收,槽函数也不需要知道哪些信号关联了自己,Qt的信号槽机制保证了信号与槽函数的调用。支持信号槽机制的类或者父类必须继承于QObject。
(3)服从
信号槽增强了对象间通讯的灵活性,同时损失了一些性能,通过信号调用的槽函数比直接调用速度慢约10倍(因为需要定位信号吸收者;遍历所有关联;编组/解组转达的参数;多线程时,信号大概需要排队),这种调用速度对性能要求不是非常高的场景是可以忽略的,是满足绝大部分场景。
信号槽的用法和性子

  1. connect(sender, signal, receiver, slot);
复制代码
sender:发出信号的对象
signal:发送对象发出的信号
receiver:吸收信号的对象
slot:吸收对象在吸收到信号之后所需要调用的函数(槽函数)
系统自带的信号:
  1. void clicked(bool checked = false)
  2. void pressed()
  3. void released()
  4. void toggled(bool checked )
  5. signals inherited from Qwidget
  6. signals inherited from Q0bject
复制代码
一、Qt焦点机制


二、内存管理与对象模型


三、多线程与并发


四、事件处理与画图


五、网络与模型视图编程

  1. QTcpSocket *socket = new QTcpSocket(this);
  2. socket->connectToHost("127.0.0.1", 1234);
  3. connect(socket, &QTcpSocket::readyRead, [=](){
  4.     QByteArray data = socket->readAll();
  5.     // 处理数据
  6. });
复制代码

六、实际场景问题


示例代码:信号槽连接

  1. // 声明
  2. class Worker : public QObject {
  3.     Q_OBJECT
  4. public slots:
  5.     void doWork() { /* ... */ }
  6. };
  7. // 连接
  8. QThread thread;
  9. Worker worker;
  10. worker.moveToThread(&thread);
  11. connect(&thread, &QThread::started, &worker, &Worker::doWork);
  12. thread.start();
复制代码

高频考点总结




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/) Powered by Discuz! X3.4