Qt 面试突击

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:独占指针

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/81973.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网工内推 | 国企、上市公司,IA/IP认证即可,有年终、绩效

01 上海市机械设备成套(集团)有限公司 招聘岗位:网络工程师 职责描述: 1、 负责公司电脑、网络设备、电器设备、办公设备等硬件的管理、维护和使用,做好计算机硬件及办公设备台帐; 2、 负责公司办公软件的…

回溯算法 解题思路

文章目录 算法介绍回溯算法能解决的问题解题模板1. 组合问题2. N皇后问题 算法介绍 回溯法(Back Tracking Method)(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标…

zookeeper —— 分布式服务协调框架

zookeeper —— 分布式服务协调框架 一、Zookeeper概述1、Zookeeper的基本概念2、Zookeeper的特点3、Zookeeper的数据结构 二、Zookeeper的安装部署1、Zookeeper的下载2、Zookeeper的安装本地模式(单机模式standalone)安装部署分布式(集群模式…

1978-2021年全国各省城镇与农村恩格尔系数数据

1978-2021年全国各省城镇与农村恩格尔系数数据 1、时间:1978-2021年 2、指标:城镇恩格尔系数、农村恩格尔系数 3、范围:31省市 4、来源:各省年鉴 5、用途:反应居民生活质量 6、指标解释: 恩格尔系数…

【SpringSecurity】三更草堂项目案例分析3 - 鉴权操作

目录 鉴权RBAC 模型前置准备redis 实现角色权限获取 鉴权 RBAC 模型 参考 CSDN 文章 RBAC(Role-Based Access Control),基于角色的访问控制,现在主流的权限管理系统的权限设计都是 RBAC 模型 所谓的 RBAC 模型,可以理…

Java精品项目源码第61期垃圾分类科普平台(代号V061)

Java精品项目源码第61期垃圾分类科普平台(代号V061) 大家好,小辰今天给大家介绍一个垃圾分类科普平台,演示视频公众号(小辰哥的Java)对号查询观看即可 文章目录 Java精品项目源码第61期垃圾分类科普平台(代号V061)难度指数&…

【TCP】滑动窗口、流量控制 以及拥塞控制

滑动窗口、流量控制 以及拥塞控制 1. 滑动窗口(效率机制)2. 流量控制(安全机制)3. 拥塞控制(安全机制) 1. 滑动窗口(效率机制) TCP 使用 确认应答 策略,对每一个发送的数…

MySQL的常用术语

目录 1.关系 2.元组 3.属性 MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 1.关系 前面的博客有说到,MySQL是一款关系型数据库管理软件,一个关系就是 一张二维表(表) 我想大家都知道表格怎么…

【100天精通Python】Day61:Python 数据分析_Pandas可视化功能:绘制饼图,箱线图,散点图,散点图矩阵,热力图,面积图等(示例+代码)

目录 1 Pandas 可视化功能 2 Pandas绘图实例 2.1 绘制线图 2.2 绘制柱状图 2.3 绘制随机散点图 2.4 绘制饼图 2.5 绘制箱线图A 2.6 绘制箱线图B 2.7 绘制散点图矩阵 2.8 绘制面积图 2.9 绘制热力图 2.10 绘制核密度估计图 1 Pandas 可视化功能 pandas是一个强大的数…

Autojs 小游戏实践-神农百草园

概述 最近一直再写刷视频软件脚本,比如手机视频软件太多,每天都需要手动提现羊毛,太累,使用Autojs来帮助我提现,签到,扯远了,因为做刷视频脚本感觉有点无聊,所以试着做小游戏找图脚…

Openresty(二十二)ngx.balance和balance_by_lua终结篇

一 灰度发布铺垫 ① init_by_lua* init_by_lua init_by_lua_block 特点: 在openresty start、reload、restart时执行,属于master init 阶段机制: nginx master 主进程加载配置文件时,运行全局Lua VM级别上的参数指定的Lua代码场景: …

Android面试题汇总(二)

一、Java集合 1、谈谈 Java 中 List、Set 以及 Map 的区别? List:有序的,数据可以重复。。 Set:无序的,数据不能重复。 Map:键值对存储。键是唯一的,值不是唯一的。 2、谈谈 ArrayList 和 Link…

每日一题~二叉搜索树中的众数

题目链接:501. 二叉搜索树中的众数 - 力扣(LeetCode) 题目描述: 思路分析: 由题可知,题目中所给的树是一颗二叉搜索树,二叉搜索树的中序遍历结果是一个从小到大的数据集,那么我们可…

「聊设计模式」之抽象工厂模式(Abstract Factory)

🏆本文收录于《聊设计模式》专栏,专门攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎持续关注&&收藏&&订阅! 前言 在软件开发中,设计模式是一种被广泛使用的经验…

C++(day4)

思维导图 封装Mystring #include <iostream> #include<cstring>using namespace std;class Mystring{ public://无参构造函数Mystring():size(10){strnew char[size];strcpy(str,"");cout<<"无参构造函数"<<endl;}//有参构造函数…

平衡二叉树删除结点后的调整操作

1.回顾插入操作 插入新结点后&#xff0c;要保持二叉排序树的特性不变&#xff08;左<中<右)若插入新结点导致不平衡&#xff0c;则需要调整平衡。 2.删除操作 删除结点后&#xff0c;要保持二叉排序树的特性不变&#xff08;左<中<右)若删除结点导致不平衡&…

MySQL只同步单个表或多个表,非全部同步!

replicate-do-table 是 MySQL 复制配置中的一个选项&#xff0c;它允许您指定要在从服务器上复制的表。如果您想要只复制主服务器上特定的表到从服务器&#xff0c;您可以使用这个选项。 以下是如何操作 replicate-do-table 的步骤&#xff1a; 停止从服务器: 在从服务器上执行…

C++---链表

1、链表 1.1、链表的结构 每个链表开头都有一个头指针Head尾节点的指针域为NULL&#xff0c;用于判断此列表是否结束 如果一个链表开始就为NULL&#xff0c;那么该链表为空链表 链表中的先后不代表在真实内存中的位置&#xff0c;只是单纯的逻辑上关系 1.2、创建链表 我们首…

网络编程 day1

1->x.mind网络编程基础 2->简述字节序的概念&#xff0c;并用共用体&#xff08;联合体&#xff09;的方式计算本机的字节序 1.字节序是指不同类型的CPU主机&#xff0c;内存存储多字节整数序列的方式 2.小端字节序&#xff1a;低序字节存储在低地址上 3.大端字节序&a…

day19正则表达式

今日内容 正则表达式 教学目标 能够理解正则表达式的作用 能够使用正则表达式的字符类 能够使用正则表达式的逻辑运算符 能够使用正则表达式的预定义字符类 能够使用正则表达式的限定符 能够使用正则表达式的分组 能够在String的split方法中使用正则表达式 正则表达式 1.1 …