QT/MFC面试题[通俗易懂]

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

大家好,又见面了,我是你们的朋友全栈君。

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接收消息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/152857.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 如何判断数组中是否含有某个元素的个数_数组有多少个元素怎么计算

    如何判断数组中是否含有某个元素的个数_数组有多少个元素怎么计算如何判断数组中是否含有某个元素

    2022年10月18日
  • idea 2022.01.21 激活码【2022免费激活】2022.02.26「建议收藏」

    (idea 2022.01.21 激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~2KLKA7BQFO-eyJsaWNlbnNlSWQiOi…

    2022年4月1日
  • 用excel求逆矩阵只出现一个数字_求逆矩阵的方法公式

    用excel求逆矩阵只出现一个数字_求逆矩阵的方法公式 因为在YUV与RGB互相转换的时候用到了矩阵运算,当时正好需要求逆矩阵,而手头上没有matlab,所以只能考虑excel了。终于让我找到了方法,共享之:1)先将矩阵的数据输入,然后将所输入的数据选中(注意:只能是N*N的矩阵),然后点击插入-名称-定义,给这个矩阵取个名字MatrixA,然后点击确定。2)再选择N*N个格,在上面的输入框内写入“=MINVERSE(MatrixA)”,

    2022年8月21日
  • Flutter一步实现Toast 弹窗(fluttertoast 库)

    Flutter一步实现Toast 弹窗(fluttertoast 库)Flutter一步实现Toast弹窗(fluttertoast库)在Flutter中,想要实现一个Toast弹窗效果,最简单、最直接的方法就是使用fluttertoast库来实现。官网地址:https://pub.flutter-io.cn/packages/fluttertoast如何使用?导入依赖#addthislinetoyourdependenciesfluttertoast:^7.1.6在使用的地方,导入类import’package:f

    2022年9月24日
  • 数据库基础:select基本查询语句

    数据库基础:select基本查询语句数据库基本查询语句规范为:select区域from表名查询指定表select*from表名*:代表所有列示例:select*fromTL_REQUEST查询指定列select列名from表名列名:代表从指定的列名中查找,:如果是查找对应的多列,则用英文逗号间隔示例:selectBU_NOfromTL_REQUEST…

    2022年6月13日
  • 阶乘算法挑战「建议收藏」

    阶乘算法挑战「建议收藏」计算所提供整数的阶乘。如果使用字母n代表一个整数,则阶乘是所有小于或等于n的整数的乘积。阶乘通常简写成n!例如:5!=1*2*3*4*5=120functionfactorialize(num){vari,mul=1;for(i=num;i>=1;i–){mul*=i;}returnmu…

    2022年7月24日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号