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

Qt 面试题复习10~12_2024-12-2

Qt 面试题

  • 28、Qt 如果一个信号的处理方法一直未被执行有哪些可能性
  • 29、Qt 三大核心机制
  • 30、虚函数表
  • 31、什么是Qt事件循环 ?
  • 32、纯虚函数和普通的虚函数有什么区别
  • 33、Qt 的样式表是什么?
  • 34、描述Qt的TCP通讯流程
  • 35、自定义控件流程
  • 36、什么是Qt的插件机制 ?

28、Qt 如果一个信号的处理方法一直未被执行有哪些可能性

1、信号正确连接

2、信号发射

3、对象销毁

4、线程问题发送信号的对象和接收槽的对象位于不同的线程中,跨线程的信号

传递需要额外的处理

5、、连接类型问题,选择不合适的连接类型可能会导致槽函数不能按预期执行

6、应用程序事件循环未启动(没有调用QApplication::exec())

29、Qt 三大核心机制

信号与槽

信号:事件发生时被调用的函数

槽:响应信号的函数

connect(信号发出者, 信号, 信号接收者, , 连接方式(隐藏默认自动连接))//五个参数

元对象系统

元对象系统分为三大类: QObjiect类 Q_OBJECT宏元对象编译器moc

QObject类:提供了访问元对象信息的方法,如获取类名、信号和槽列表

Q_OBJEC宏:在类声明中使用O_OBJECT宏,使该类具备元对象系统的功能

moc工具:Qt的元对象编译器(Meta-Object Compiler),负责生成必要的元对象代码

事件系统

事件的创建

鼠标事件,键盘事件,窗口调整事件,模拟事件

事件的交付

30、虚函数表

多态是由虚函数实现的,而虚函数主要是通过虚函数表实现的。如果一个中包含

虚函数,那么这个就会包含一张虚函数表,虚函数表存储的每一项是一个虚函数

地址。该类的每个对象都会包含一个虚指针(虚指针存在于对象实例地址的最前

面,保证虚函数表有最高的性能),虚指针指向虚函数表

注意:对象不包含虚函数表,只有虚指针才包含虚函数表派生类会生成一个

兼容基类的虚函数表

31、什么是Qt事件循环 ?

Qt事件循环是一种程序架构,它用于处理窗口系统其他用户界面事件,以及与用户界面无关的事件例如定时

网络事件。 Qt事件循环以循环的方式运行,每次循环都会检査是否有事件,如果有就会调用相应

理程序
来处理它们。

32、纯虚函数和普通的虚函数有什么区别

1、普通虚函数可以在基类中给出默认实现,而纯虚函数仅是一个接口声明,不包含具体的实现。

2、含有普通虚函数的类可以直接创建实例;而含有纯虚函数的类(即抽象类)不能直接实例化,只能作为其他

类的基础。

3、如果你希望定义一个接口子类去实现,那么应该使用纯虚函数;如果想要提供一个默认的行为同时允许

子类进行扩展修改,那么普通的虚函数将是更好的选择

33、Qt 的样式表是什么?

样式表是Qt中用于定制界面风格的一种机制。样式表使用CSS语法,可以定义界面元素的属性颜色字体

等。Qt中的样式表可以应用于整个应用程序特定的控件,使得应用程序的界面可以与众不同。Qt还提供了

QStyle类和QStyleFactory类,用于管理系统默认样式和自定义样式。

34、描述Qt的TCP通讯流程

服务端(QTcpServer)

1、创建TcpServer对象

2、使用listen()方法将服务器绑定到本地地址和端口

3、当有新的客户端连接成功发送newConnect信号

4、在newConnection信号槽函数中,调用nextPendingConnection函数获取新连接QTcpSocket对象

5、连接QTcpSocket对象的readyRead()信号

6、在readRead信号的槽函数使用readAll()接收数据

7、使用write()方法向客户端发送数据

客户端(QTcpSocket)

1、创建QTcpSocket 对象

2、使用connectToHost()方法连接到服务器的地址和端口

3、检查连接状态

4、connected信号的槽函数开启发送数据

5、使用write()发送数据,readAll()接收数据

35、自定义控件流程

1、 定义类: 创建头文件源文件定义自定义控件类

2、重写方法:根据需求重写虚函数,如 paintEvent、mousePressEvent 等

3、使用控件:在主窗口或其他地方实例化并使用自定义控件

4、编译和运行:确保项目配置正确,并编译运行以测试自定义控件

5、调试和优化:调试和优化自定义控件,确保其稳定性和性能

36、什么是Qt的插件机制 ?

Qt的插件机制是一种将应用程序的功能模块化的方法。通过使用Qt的插件机制,可以将应用程序的一些功能打

包成独立的插件,这些插件可以在运行时动态加载卸载,从而实现应用程序的可扩展性和灵活性

http://www.kler.cn/a/422132.html

相关文章:

  • 【Redis篇】 List 列表
  • 深入解析级联操作与SQL完整性约束异常的解决方法
  • 003-SpringBoot整合Pagehelper
  • 使用Python和OpenCV自动检测并去除图像中的字幕
  • Qt清空文件夹下的内容
  • SpringBoot+MyBatis整合ClickHouse实践
  • Android Folding
  • kafka 配置消息编码格式、解决消费者中文乱码
  • uniapp动态表单
  • Llama模型分布式训练(微调)
  • 在RK3588/RK3588s中提升yolov8推理速度
  • WPF_2
  • IOS ARKit进行图像识别
  • 05云计算HCIA学习笔记
  • Git操作学习2
  • Simulink的SIL软件在环测试
  • Modern Effective C++ 条款二十九三十:移动语义和完美转发失败的情况
  • 基于Matlab实现三维点坐标生成点云(源码+数据)
  • IDEA中Maven相关使用
  • IDEA中更改了项目模块名,IDEA丢失该模块的问题
  • 基于Java Springboot武汉市公交路线查询APP且微信小程序
  • elasticsearch 8.x常用命令
  • 容器运行应用及Docker命令
  • SpringBoot 基于 MVC 高校办公室行政事务管理系统:设计构思与实现范例展示
  • XRP 深度解析:从技术到 Meme 币交易指南
  • TCP/IP 9 网络安全