当前位置: 首页 > backend >正文

QT面试题总结(持续更新)

1、QT简介:QT是一个跨平台的C++应用程序开发框架,支持Windows、Linux、macOS、IOS、Android等

2、QT优势:跨平台性、丰富的类库、信号与槽机制、文档和社区支持

3、QT信号与槽机制:用于对象间通信的机制。当一个对象状态发生变化时,发出一个信号signal,另一个对象可以连接这个信号到一个slot函数上

  • 当线程的信号与槽实现原理主要是由观察者模式与函数指针的联合使用
  • 多线程的信号与槽实现原理本质上是事件机制
  • 优势:类型安全,松散耦合
  • 缺点:相比回调函数慢10倍,性能下忽略不计
  • 本质:一种高级的、类型安全的对象间通信机制,替代传统的、不安全的回调函数(如函数指针)
  • 用法:一个信号连接多个槽,多个信号连接一个槽

4、QT元对象系统:实现信号与槽机制、属性系统、动态类型转换等功能的基础,通过Q_OBJECT宏、元对象编译器(MOC)等技术实现。

5、QT信号与槽机制连接方法5种:UI信号槽自动连接、Lamda表达式、自定义信号槽、QT4宏直接连接函数、QT5新式语法 信号槽使用(五种写法)

6、QT信号与槽机制连接类型5种:AutoConnection(默认)、DirectConnection(槽立即被调用)、QueuedConnection(槽放入线程事件队列中)、BlockingQueuedConnection(会阻塞发送者的线程,直到solt处理完毕)、UniqueConnection(确保信号与槽之间只建立一次连接,避免重复连接)

7、QT信号和槽参数:信号的参数类型和数量必须与槽函数的参数类型和数量兼容,类型安全。

8、QT中的事件机制(Event  loop):当开启事件循环时,会创建一个事件队列并监听,触发事件时(鼠标点击、键盘输入等)会经过过滤,筛选掉不需要处理的事件,将需要处理的事件发送到监听列队中,监听方根据处理策略将需要处理的事件取出,调用对应函数处理

9、QT创建多线程的两种方式:①使用QThread类。②继承QObject。多线程使用(两种方式)

10、QT子线程与主线程通信:通过信号与槽机制进行通信,使用Qt::Queuedonnection连接类型

11、QT多线程的线程安全问题:使用互斥锁(QMutex),在访问共享资源时,使用互斥锁进行加锁和解锁操作,确保同一时间只有一个线程可以访问共享资源。

12、QT中的布局管理器:水平、垂直、网格、表单布局

13、QT自定义控件:继承QWidget或其他控件类,重写相关的虚函数来实现。

  1. 虚函数是C++实现运行时多态的核心机制。基类函数声明Virtual,派生类中才能使用override重写函数。C++ 虚函数学习

14、QT中连接MYSQL:安装mysql驱动,使用QSqlDatabase连接数据库

15、QT中的内存管理机制的用法与原理:

用法:用法为在子对象构造时传递父对象的指针即可,或者子对象调用setParent()函数设置或更换父对象。Qt中基本所有带有Parent与Children单词的函数基本都与内存管理相关。

原理:在设置父对象的时候,让父对象保存子对象的地址,然后在父对象的析构函数中释放子对象。即可完成内存管理,Qt中的内存管理规则为一个父对象可以管理多个子对象,而子对象最多只会有一个父对象,并且由于父对象需要管理多个子对象,导致必须使用容器存储,且所有子对象和父对象必须直接或间接继承同一个类。

16、QT窗口对象的父子关系如何指定?有什么作用与好处?

指定:窗口对象(QWidget)的父子关系可由子对象的构造函数中传递父对象的指针完成,或者子对象调用setParent()函数,传递父对象的指针。

作用:子窗口默认会成为父窗口的子窗口,会嵌套进父窗口中,在父窗口显示时同时显示,父窗口隐藏时同时隐藏。

好处:父窗口销毁时会带着子窗口一起销毁,子对象无需再调用delete

17、QT中如果一个信号的处理方法一直未被执行,有哪些可能?

  • 槽函数对象已经被销毁

  • 存在长期处理的事件函数导致程序卡在事件中

  • 连接信号与槽时参数错误或未进行连接

  • 单线程的信号与槽中配置的阻塞排队属性(BlockingQueuedConnection)导致死锁

  • 多线程信号与槽的通信中,槽函数所在线程未开启事件循环

18、QT中信号与槽如何同步异步?

  • 信号与槽中第五个参数默认情况下为QT::AutoConnection,单线程时会自动选择QT::DirectConnection(直连)。多线程时会自动选择QT::QueuedConnection(排队方式)
  • QT默认单线程的信号与槽的连接为同步的,也就是QT::DirectConnection(直连),只要信号触发,一定会优先执行槽函数,槽函数执行结束后则返回到信号调用的位置。
  • QT默认多线程的信号与槽的连接为异步的,也就是QT::QueuedConnection(排队方式),信号触发后不会等待槽函数结束,会直接往后执行,而槽函数在事件循环中排队,等待签名的事件执行完再开始执行。
  • 多线程中如果想同步需要将连接类型配置为QT::BlockingQueuedConnection(阻塞排队方式)
http://www.xdnf.cn/news/18594.html

相关文章:

  • Excel 表格 - 合并单元格、清除单元格格式
  • kubernetes中的认证和授权
  • 小程序全局状态管理:使用MobX进行跨组件数据共享详解(九)
  • 国内使用SSH稳定使用github
  • 分布式账本:当不可篡改性遭遇法律拷问
  • ​Mac用户安装JDK 22完整流程(Intel版dmg文件安装指南附安装包下载)​
  • 【链表 - LeetCode】206. 反转链表【带ACM调试】
  • [身份验证脚手架] 前端认证与个人资料界面
  • 商密保护迷思:经营秘密到底需不需要鉴定?
  • 高并发内存池(1)-定长内存池
  • 通过python程序将实时监测数据写入excel软件进行保存是常用和非常实用的功能,本文教会大家怎么去搞定此功能
  • 塔能科技物联精准节能如何构建智慧路灯免疫系统
  • pycharm的matplotlib不显示动图问题的解决
  • `free` 内存释放函数
  • Linux --网络基础概念
  • 分布式事务的两种解决方案
  • K8s部署MySQL8.0数据库
  • 【大语言模型 17】高效Transformer架构革命:Reformer、Linformer、Performer性能突破解析
  • Baumer高防护相机如何通过Tiny-YOLO单类模型实现人体跌倒检测与跟踪(C#代码UI界面版)
  • 从 UMG 到 Unreal 引擎深层的 UI 定制艺术:Slate 底层 UI 框架简介
  • Python爬虫-解决在抓包的过程中,找不到接口地址的问题
  • 『深度编码』操作系统-进程之间的通信方法
  • 使用dumpbin指令分析Windows下的PE文件(伍)
  • 跨语言文化的统一语义真理:存在性、形式化及其对自然语言处理(NLP)深层语义分析的影响
  • Transformer实战(13)——从零开始训练GPT-2语言模型
  • Redis--day12--黑马点评--附近商铺用户签到UV统计
  • Trip Footprint_Trae Solo模式生成一个旅行足迹App
  • 【卷积神经网络详解与实例】2——卷积计算详解
  • 大模型训练方法全面解析:SFT、RFT、TRPO、DPO、PPO、GRPO、RLH、RLHF技术深度剖析
  • 14.Shell脚本修炼手册--玩转循环结构(While 与 Until 的应用技巧与案例)