QT面试题

1、QT信号槽机制的优缺点 
1)QT信号槽机制的引用精简了程序员的代码量 
2)QT的信号可以对应多个槽(但他们的调用顺序随机),也可以多个槽映射一个信号 
3)QT的信号槽的建立和解除绑定十分自由 
4)信号槽同真正的回调函数比起来时间的耗损还是很大的,所有在嵌入式实时系统中应当慎用 
5)信号槽的参数限定很多例如不能携带模板类参数,不能出现宏定义等等

2、(1) 描述过程, 如何实现一个自定义按钮, 使其在光标进入,按下,离开三种状态下显示不同的图片. 
创建一个类, 让其从QPushButton类派生, 重写该类中的事件处理器函数 
1>. enterEvent() – 光标进入 
2>. leaveEvent() – 光标离开 
3>. mousePressEvent() – 鼠标按下 
4>. paintEvent() – 刷新背景图 
在每个事件中切换不同的图片, 通过paintEvent函数将新的图片刷新到按钮上 
手动刷新函数: update() 
(2) 描述在MFC视图窗口中, 单击鼠标右键如何弹出一个右键菜单? 
1. 在视图窗口中添加鼠标右键的消息处理函数 
2. 创建并实例化一个菜单对象 
3. 调用CMenu类的TrackPopupMenu函数显示右键菜单 
4. 给菜单项添加事件处理函数

3、多线程情况下, Qt中的信号槽分别在什么线程中执行, 如何控制? 
可以通过connect函数的第五个参数来控制, 信号槽执行时所在的线程 
1>. 直接连接 – 信号槽函数在信号发出者所在线程中执行 
2>. 队列连接 – 信号在信号发出者所在线程中执行,槽函数在信号接收者所在线程中执行. 
3>. 自动连接 – 多线程时为队列连接方式, 单线程时为直接连接方式 
默认情况为自动连接方式.

4、描述QT中的文件流(QTextStream)和数据流(QDataStream)的区别, 他们都能帮助我们完成一些什么事情. 
QTextStream – 文本流, 操作轻量级数据(int, double, QString), 数据写入文件中之后以文本的方式呈现。 
QDataStream – 数据流, 通过数据流可以操作各种数据类型, 包括类对象, 存储到文件中数据可以还原到内存。 
QTextStream, QDataStream可以操作磁盘文件, 也可以操作内存数据, 通过流对象可以将数据打包到内存, 进行数据的传输.

5、描述Qt下Tcp通信的整个流程 
服务器端: 
1. 创建用于监听的套接字 
2. 给套接字设置监听 
3. 如果有连接到来, 监听的套接字会发出信号newConnected 
4. 接收连接, 通过nextPendingConnection()函数, 返回一个QTcpSocket类型的套接字对象(用于通信) 
5. 使用用于通信的套接字对象通信 
1>. 发送数据: write 
2>. 接收数据: readAll/read 
客户端: 
1. 创建用于通信的套接字 
2. 连接服务器: connectToHost 
3. 连接成功与服务器通信 
1>. 发送数据: write 
2>. 接收数据: readAll/read

6、(1) 描述QT下udp通信的整个流程 
QT下udp通信服务器端和客户端的关系是对等的, 做的处理也是一样的. 
1. 创建套接字对象 
2. 如果需要接收数据, 必须绑定端口 
3. 发送数据: writeDatagram 
4. 接收数据: readDatagram 
(2) 描述QT下多线程的两种使用方法, 以及注意事项 
第一种方法: 
1. 创建一个类从QThread类派生 
2. 在子线程类中重写 run 函数, 将处理操作写入该函数中 
3. 在主线程中创建子线程对象, 启动子线程, 调用start()函数 
第二种方法: 
1. 将业务处理抽象成一个业务类, 在该类中创建一个业务处理函数 
2. 在主线程中创建一QThread类对象 
3. 在主线程中创建一个业务类对象 
4. 将业务类对象移动到子线程中 
5. 在主线程中启动子线程 
6. 通过信号槽的方式, 执行业务类中的业务处理函数 
多线程使用注意事项: 
* 1. 业务对象, 构造的时候不能指定父对象 
* 2. 子线程中不能处理ui窗口(ui相关的类) 
* 3. 子线程中只能处理一些数据相关的操作, 不能涉及窗口

7、描述Windows下一个消息从触发到处理的整个路由过程. 
应用程序启动, 操作系统为程序创建一个对应的消息队列, 用户对创建进行操作, 产生一系列消息, 
操作系统首先捕捉到这些消息, 将消息投递到对应的消息队列中, 在应用程序中对应一个消息循环 
消息循环每次从消息队列中取出消息, 取出的消息如果是虚拟键消息, 会将其转换成标准消息, 将 
转换的消息再次投递到消息队列, 如果取出的是标准消息, 会将该消息发送给操作系统, 操作系统 
会调用对应的窗口过程函数, 下窗口过程函数中对对用的消息进程处理.

8、在MFC窗口中制作一个逃跑按钮(鼠标永远捕捉不到), 该如何实现 
创建一个类MyButton, 让该类从CButton类派生 
在该子类中处理鼠标移动事件, 鼠标移动到该按钮上, 计算随机位置, 移动按钮 
在窗口中拖放一个CButton按钮, 给该按钮关联一个MyButton类型的变量, 即可

9、描述MFC中文档视图结构中都需要哪些类, 这些类之间是如何实现相互访问的? 
文档视图结构: 
文档类 
视图类 
框架类 
应用程序类 
在MFC框架的任何位置都可以访问窗口框架类: AfxGetMainWnd() 
在MFC框架的任何位置都可以访问应用程序类: AfxGetApp() 
视图类中访问关联的文档类: GetDocument() 
框架类中访问文档类: GetActiveDocument() 
框架类中访问视图类: GetActiveView()

10、 描述MFC中的消息映射 
MFC中的消息映射分为三个部分 
1. 消息映射声明: DECLARE_MESSAGE_MAP() 
2. 执行消息映射的宏 
BEGIN_MESSAGE_MAP() 
// 消息映射入口 
ON_WM_PAINT() 
END_MESSAGE_MAP() 
3. 添加消息处理函数的声明和定义

11、描述在MFC中如何使用ODBC访问MySQL数据库? 
1. 安装Mysql的odbc驱动 
2. 使用向导添加数据源 
3. 创建MFC单文档/多文档视图应用程序, 添加数据库支持, 选择数据源, 给数据源中的数据库表绑定记录集类 
4. 通过绑定的记录集对象访问对应的数据库表”

12、QT如果要进行网络编程首先需要在.pro中添加如下代码:QT += network 
在头文件中包含相关头文件 
include QHostInfo 
include QNetworkInterface 
(因无法显示,略去#与< >) 
2、QT的UdpSocket接收消息使用原则 
第一步:new一个UdpSocket 
第二步:调用UdpSocket的bind方法,同时指定端口号 
第三步:使用connect将接收消息函数和UdpSocket对象做关联 
第四步:在接受消息槽函数当中调用readDatagram接收消息

  • 16
    点赞
  • 153
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一些可能会在Qt高级工程师面试中出现的问题以及相应的答案: 1. 什么是Qt框架? Qt是一个跨平台的C++应用程序开发框架,它包括GUI、网络、数据库、XML、多媒体等模块,使开发者能够快速地构建高性能、高可靠性和易于维护的应用程序。 2. 什么是信号和槽(Signals and Slots)? 信号和槽是Qt框架的核心机制,它们用于对象之间的通信。信号是一种特殊的函数,当特定事件发生时,对象会发出信号。槽是一种响应函数,当信号被发出时,槽函数会被执行。通过信号和槽,对象之间可以进行松散耦合的通信,使得代码更加灵活和可维护。 3. 什么是QML? QML是一种声明式语言,用于快速创建用户界面。它允许开发者使用JavaScript编写UI逻辑,并使用Qt Quick组件库构建高效的跨平台应用程序。QML可以与C++代码无缝集成,使得开发者能够充分利用Qt框架的强大功能。 4. 什么是Qt Creator? Qt Creator是一个集成开发环境(IDE),用于开发基于Qt框架的应用程序。它包括代码编辑器、调试器、可视化设计工具和构建系统等功能,使得开发者能够快速地编写、调试和部署应用程序。 5. 什么是Qt Quick? Qt Quick是一个用于创建现代用户界面的框架,它基于QML和Qt Quick组件库。它允许开发者使用声明式语言和可视化设计工具快速创建高效的用户界面,并提供了丰富的动画和交互效果。 以上是一些可能会在Qt高级工程师面试中出现的问题和相应的答案,当然这只是一部分,实际面试中还可能会有其他问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值