Qt 面试突击

2023-09-14 10:18:05

1.在Qt中,多线程环境下,信号槽分别在什么样的线程中执行,如何控制?

(1)信号槽的执行线程

  • 如果信号和槽都在同一个线程,就它们就在这个线程中执行
  • 如果信号和槽不在同一个线程:
    • Qt::DirectConnection :信号槽会在信号发射的线程中直接执行。(可能导致线程安全问题)
    • Qt::QueuedConnection:信号槽的执行将被放入接收槽所在线程的事件队列中,然后在该线程的事件循环中执行。(可以在不同线程中安全的传递信号)
    • Qt::AutoConnection:这个连接方式会根据信号和槽所在的线程选择合适的连接方式,当两者在一个线程中选择 Qt::DirectConnection ,不在一个线程中选择 Qt::QueuedConnection 。

(2)控制信号槽的执行线程

  • QObject :: moveToThread:可以使用这个函数将一个 QObject 派生类的对象移到目标线程中,从而使其信号槽在目标线程中执行。
MyObject *myObject = new MyObject;
QThread *thread = new QThread;
myObject->moveToThread(thread);
connect(sender, SIGNAL(someSignal()), myObject, SLOT(someSlot()));
thread->start();
  • Qt::QueuedConnection在连接信号槽时,明确指定使用队列连接方式,可以确保信号槽在接收信号的线程的事件循环中执行(无论事件和槽是否位于不同线程中)。
connect(sender, SIGNAL(someSignal()), myObject, SLOT(someSlot()), Qt::QueuedConnection);
  • Qt::AutoConnection:自动选择适应的连接方式。
connect(sender, SIGNAL(someSignal()), myObject, SLOT(someSlot()), Qt::AutoConnection);

2.在Qt开发中,UDP协议当中的UdpSocket 通讯流程?

  • 第一步,创建UDP 套接字(QUdpSocket)
  • 第二步,服务器端进行绑定IP地址和端口号(bind)
  • 第三步,发送数据(接收数据)(writeDatagram、readDatagram(readyRead信号->相应槽函数))
  • 第四步,关闭套接字

3.在Qt开发当中,TCP协议通讯流程?

  • 第一步,创建服务器端或客户端对象(服务器:QTcpServer    客户端:QTcpSocket)
  • 第二步,服务器端进行 listen 监听
  • 第二步,连接信号和槽
    • 服务器端连接 QTcpServer 的 newConnection 信号
    • 客户端连接 QTcpSocket 的信号,如 connected、readyRead(当有数据可读时触发)、disconnected 等
  • 第三步,建立连接
    • 服务器端:在 newConnection 槽内创建新的 QTcpSocket 来处理客户端连接
    • 客户端:使用 connecToHost 连接到服务器
  • 第四步,双方都可以通过 QTcpSocket 发送和接收数据
  • 第五步,使用 close 关闭套接字连接,服务器端在 disconnected 槽内移除连接。

4.Qt信号槽机制优点与缺点?

优点:

  • 松耦合:信号槽机制将信号发送和信号接收解耦,使得各个组件依赖关系比较松散。
  • 事件驱动:可以在两个对象中通过信号触发自定义操作,使得事件驱动变得简单。
  • 多线程支持:因为信号和槽可以在多线程环境中正常运行。
  • 可读性:直观的描述了对象之间的交互关系。

缺点:

  • 性能开销:信号槽机制有一定性能开销,某些性能敏感的应用中可能需要考虑。(速度相对比较慢)
  • 运行时错误检查:信号槽连接的错误只在运行时捕获,当出现错误,无法在编译时知道
  • 不适用所有场景:信号和槽机制更适合事件驱动和异步编程,简单的同步操作可以直接函数调用。

5.Qt 中文件流 QTextStream 和数据流 QDataStream 有什么区别?

  • QTextStream 适用于处理文本文件,它处理文本数据的编码和换行符等细节,提供文本 I/O 操作。
  • QDataStream 适用于处理二进制数据,它可以操作各种数据类型。

6.Qt中的智能指针?

  • QSharedPointer:共享指针
  • QScopedPointer:弱引用指针
  • QWeakPointer:独占指针
更多推荐

Matlab进阶绘图第30期—冲击图

冲击图是一种特殊的堆叠柱状图。与堆叠柱状图相比,冲击图添加了相邻柱子中相同组分之间的连线,可以更加清晰地表达各组分占比情况。由于Matlab中未收录冲击图的绘制函数,因此需要大家自行解决。本文使用自制的Fbarstacked小工具进行冲击图的绘制,先来看一下成品效果:特别提示:本期内容『数据+代码』已上传资源群中,加群

cmake:target属性POSITION_INDEPENDENT_CODE和INTERFACE_POSITION_INDEPENDENT_CODE的区别

cmake定义的target有两个名字类似的属性:POSITION_INDEPENDENT_CODE和INTERFACE_POSITION_INDEPENDENT_CODE,本文说明它们的含义和区别-fPIC介绍POSITION_INDEPENDENT_CODE和INTERFACE_POSITION_INDEPENDE

matlab读写json文件

Background通常,在matlab中使用mat文件进行数据存储。MAT文件是MATLAB中用来存储数据的二进制文件格式。MAT文件可以包含各种数据类型,包括数字、矩阵、向量、结构体、字符和函数等。但是,当和其他语言有交互时,mat文件会不太方便。而json格式在许多编程语言中,包括MATLAB,都有提供解析和创建

【LQR】离散代数黎卡提方程的求解,附Matlab/python代码(笔记)

LQR的核心是设计QRN,并求解对应的黎卡提方程对于连续状态空间方程系统,先求连续LQR后离散和先离散后求离散LQR方程的结果是不一样的1.离散代数黎卡提方程注:LQR算法中含N项离散系统:在matlab里有现成的函数dlqr(),但为了搞清楚其内核,编写matlab代码展示其求解过程matlab帮助文件里的dlqr(

淘宝拍立淘插件转链和商业化图片生成接口介绍,图片搜索商品接口,按图搜索接口,图片识别商品接口介绍

淘宝拍立淘是淘宝网推出的一种搜索方式,通过拍立淘,用户可以输入文字描述或上传图片来搜索商品。拍立淘通过与淘宝网进行数据接入和授权,使用淘宝提供的API获取商品信息和操作权限,拍立淘使用图像识别技术,通过深度学习算法和计算机视觉技术,对用户拍摄的商品照片进行识别,拍立淘插件转链API用于为淘宝客提供开启拍立淘插件(根据图

基于改进莱维飞行和混沌映射的粒子群优化BP神经网络预测股票价格研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳️座右铭:行百里者,半于九十。📋📋📋本文目录如下:🎁🎁🎁目录💥1概述📚2运行结果🎉3参考文献🌈4Matlab代码实现💥1概述基于改进莱维飞行和混沌映射的粒子群优化BP神经网络

SunTorque亮相GAF2023数字化智能装配工程与装备技术大会

智能扭矩系统-智能拧紧系统-智能扭矩控制-SunTorqueGAF2023数字化智能装配工程与装备技术大会在中国上海汽车会展中心盛大开幕,青创智通与装配领域、智能制造、数字化应用等相关先进智造技术的知名企业一齐亮相。本次展会,我们带来了扭矩相关解决方案,包含智能扭矩系统软件、工具存储设备、扭矩校验设备、智能手持终端、扭

neo4j下载安装配置步骤

目录一、介绍简介Neo4j和JDK版本对应二、下载官网下载直接获取三、解压缩安装四、配置环境变量五、启动测试一、介绍简介Neo4j是一款高性能的图数据库,专门用于存储和处理图形数据。它采用节点、关系和属性的图形结构,非常适用于表示和查询复杂的实体关系。Neo4j具有高性能、事务支持、可扩展性和直观的Cypher查询语言

喜报 | 亮相2023数博会,摘得首届数智金融创新大赛优秀奖

河北正定,千年古城,这里不仅有一幕幕刀光剑影,鼓角争鸣的故事,还有驰名中外的人“一寺四塔”,有宜人的气候,也有汇聚高科技的天下英雄会。图源于网络2023年9月6日,河北正定,中国国际数字经济博览会(以下简称数博会)正式开幕,坚定“工业互联网赋能千行百业”的科技信仰,奔向“数字经济引领高质量发展”的未来世界。图源于网络据

探索小程序的世界(专栏导读、基础理论)

文章导读一、为什么要学习小程序开发1.1低门槛1.2市场需求1.3创业机会1.4技术发展趋势二、专栏导读2.1实战系列2.2工具系列2.3游戏系列2.4插件系列三、基础理论3.1微信小程序简易教程框架组件API工具开发者工具项目结构3.2app.json配置pageswindowtabbar3.3App.jsonLau

k8备份与恢复-Velero

简介Velero是一款可以安全的备份、恢复和迁移Kubernetes集群资源和持久卷等资源的备份恢复软件。Velero实现的kubernetes资源备份能力,可以轻松实现Kubernetes集群的数据备份和恢复、复制kubernetes集群资源到其他kubernetes集群或者快速复制生产环境到测试环境等功能,这种备份

热文推荐