1、QT信号的优缺点
- QT信号槽机制的引用精简了程序员的代码量
- QT的信号可以对应多个槽(但他们的调用顺序随机),也可以多个槽映射一个信号
- QT的信号槽的建立和解除绑定十分自由
- 信号槽童真正的回调函数相比时间的损耗还是很大的,所以在嵌入式实时系统中应当慎用
- 信号槽的参数限定很多,例如不能带模板类参数,不能出现宏定义等等
2、
6. 描述过程,如歌实现一个自定义按钮,使其在光标进入,按下,离开三种状态下显示不同的图片。
创建一个类,让其从QPushButton类派生,重写这类中的事件处理器函数
- enterEvent()-光标进入
- leaveEvent()-光标离开
- mousePressEvent()-鼠标按下
- paintEvent()-刷新背景图
在每个事件中切换不同的图片,通过paintEvent函数将新的图片刷新到按钮上,手动刷新函数:update()
2.描述在MFC视图窗口中,单机鼠标右键如何弹出一个右键菜单
- 在视图窗口中添加鼠标右键的消息处理函数
- 创建并实例化一个菜单对象
- 调用CMenu类的TrackPopupMenu函数显示右键菜单
- 给菜单项添加事件处理函数
3、多线程情况下,Qt中的信号槽分别在什么线程中执行,如何控制?
可以通过connect函数的第五个参数来控制,信号槽执行时所在的线程
- 直接连接-信号槽函数在信号发出者所在线程中执行
- 队列连接-信号在信号发出者所在线程中执行,槽函数在信号接收者所在线程执行
- 自动连接-多线程时为队列连接方式,单线程时为直接连接方式
默认情况为自动连接方式
4、描述QT中的文件流(QTextStream)和数据流(QDataStream)的区别, 他们都能帮助我们完成一些什么事情.
- QTextStream – 文本流, 操作轻量级数据(int, double, QString), 数据写入文件中之后以文本的方式呈现。
- QDataStream – 数据流, 通过数据流可以操作各种数据类型, 包括类对象, 存储到文件中数据可以还原到内存。
- QTextStream, QDataStream可以操作磁盘文件, 也可以操作内存数据, 通过流对象可以将数据打包到内存, 进行数据的传输。
5、描述Qt下Tcp通信的整个流程
服务器端:
- 创建用于监听的套接字
- 给套接字设置监听
- 如果有连接到来, 监听的套接字会发出信号newConnected
- 接收连接, 通过nextPendingConnection()函数, 返回一个QTcpSocket类型的套接字对象(用于通信)
- 使用用于通信的套接字对象通信
- 发送数据: write
- 接收数据: readAll/read
客户端: - 创建用于通信的套接字
- 连接服务器: connectToHost
- 连接成功与服务器通信
- 发送数据: write
- 接收数据: readAll/read
6、
(1) 描述QT下udp通信的整个流程
QT下udp通信服务器端和客户端的关系是对等的, 做的处理也是一样的.
- 创建套接字对象
- 如果需要接收数据, 必须绑定端口
- 发送数据: writeDatagram
- 接收数据: readDatagram
(2) 描述QT下多线程的两种使用方法, 以及注意事项
第一种方法:
- 创建一个类从QThread类派生
- 在子线程类中重写 run 函数, 将处理操作写入该函数中
- 在主线程中创建子线程对象, 启动子线程, 调用start()函数
第二种方法: - 将业务处理抽象成一个业务类, 在该类中创建一个业务处理函数
- 在主线程中创建一QThread类对象
- 在主线程中创建一个业务类对象
- 将业务类对象移动到子线程中
- 在主线程中启动子线程
- 通过信号槽的方式, 执行业务类中的业务处理函数
多线程使用注意事项:
- 业务对象, 构造的时候不能指定父对象
- 子线程中不能处理ui窗口(ui相关的类)
- 子线程中只能处理一些数据相关的操作,不能涉及窗口
7、描述Windows下一个消息从触发到处理的整个路由过程.
应用程序启动,操作系统为程序创建一个对应的消息队列,用户对创建进行操作,产生一系列消息,操作系统首先捕捉到这些消息,将消息投递到对应的消息队列中,在应用程序中对应一个消息循环消息循环每次从消息队列中取出消息, 取出的消息如果是虚拟键消息, 会将其转换成标准消息,将转换的消息再次投递到消息队列,如果取出的是标准消息,会将该消息发送给操作系统,操作系统会调用对应的窗口过程函数,下窗口过程函数中对对用的消息进程处理。
8、在MFC窗口中制作一个逃跑按钮(鼠标永远捕捉不到),该如何实现
创建一个类MyButton,让该类从CButton类派生在该子类中处理鼠标移动事件,鼠标移动到该按钮上,计算随机位置,移动按钮在窗口中拖放一个CButton按钮,给该按钮关联一个MyButton类型的变量,即可。
9、描述MFC中文档视图结构中都需要哪些类,这些类之间是如何实现相互访问的?
文档视图结构:
文档类
视图类
框架类
应用程序类
在MFC框架的任何位置都可以访问窗口框架类:AfxGetMainWnd()
在MFC框架的任何位置都可以访问应用程序类:AfxGetApp()
视图类中访问关联的文档类:GetDocument()
框架类中访问文档类:GetActiveDocument()
框架类中访问视图类:GetActiveView()
10、描述MFC中的消息映射
MFC中的消息映射分为三个部分
- 消息映射声明:DECLARE_MESSAGE_MAP()
- 执行消息映射的宏
BEGIN_MESSAGE_MAP()
消息映射入口
ON_WM_PAINT()
END_MESSAGE_MAP() - 添加消息处理函数的声明和定义
11、描述在MFC中如何使用ODBC访问MySQL数据库?
- 安装Mysql的odbc驱动
- 使用向导添加数据源
- 创建MFC单文档/多文档视图应用程序,添加数据库支持,选择数据源,给数据源中的数据库表绑定记录集类
- 通过绑定的记录集对象访问对应的数据库表