这周学完了QT,现在我对在学习QT的一些知识点进行一个总结
QT做UI的,主要做 PC上的UI的,QT的特点: 跨平台 win linux macos 等,同时还是开源的,它 面向对象的,使用C++开发[ qt改进了C++], 执行效率高,同时QT提供了全套方法: UI 进程 线程 文件 数据 网络 .......
1.信号和槽:
信号signal: 对象因为某种事件,发出信号
槽slot: 信号的接受者,处理信号的对象
信号和槽,主要是用于对象之间的通信: 一个对象发出信号,另一个对象接受信号并处理信号.而且是是QT特有的方式
2.一些小控件 按钮 文本框 label 单选 复选 ....
如何学习一个小控件呢:
1.知道他发出的那些信号,之后我们可以 定义新对象,使用slot处理该信号
2.如何控制显示内容
父对象: 和继承没有关系
比如btn对象,想显示在 背景对象之上,btn对象要把parent对象
设置为 背景对象.
qt会按照这套规则, 让子对象显示在父对象之上.
qt在显示父对象的时候,也同时会显示 父对象的所有子对象.
3.布局 layout
基本布局,只有两种
QVLayoutBox--垂直布局 内部的控件都是垂直摆放
QHLayoutBox-水平布局 内部控件都是水平摆放
我们常见的都是 两者的混合, 嵌套布局
4.菜单 Qmenu
1)ui创建菜单
2)手工创建菜单
5.事件Event
事件和信号关系:
对一个控件来说,来自外部的操作(点击 双击 滑动 划过)称为 事件event
当某控件收到 事件之后,可以内部发出信号,通知其他对象
信号是基于事件实现的.
6.绘图
为什么要自己画,qt提供的控件满足不了我们的需求
7.QT线程
我们知道主线程(又称 GUI线程),负责监控窗口上的任何事件,一旦发现事件,立马处理.但是有时候,任务很耗时,GUI进程会卡住,UI无响应 可否 创建一个新的子线程,负责处理 耗时的任务,###GUI线程只负责 UI刷新####.注意事项, 非GUI线程禁止访问 界面上任何元素. 如果非要显示,子线程要传递数据给GUI,有GUI线程负责刷新.
8.网络
需要在 工程.pro中,添加 QT += network
qt提供了socket接口,但是这套接口 基于信号和槽的, 而且qt所有的函数默认都是非阻塞的
qt网络主要用在 客户端,服务器主要用来写小型 测试的服务器.
客户端 服务器
fd=socket() listenfd=socket();
ret = connect(ip,port); bind(self_ip,port);
while(1){ lisetn();
sned(buf,len); while(1){
recv(buf,len); newfd=accept();
sleep(1); 加入集合或者线程....
} }
close(fd);