QT学习(2)

事件

事件与信号的关系??

点击按钮,也会进入到事件循环,处理槽函数

事件对操作系统而言

事件大部分都是由硬件触发;事件产生,操作系统是知道的

鼠标移动:

 

事件在qt中是由多态去实现的!!!

多态的条件:

  1. 继承,一个父类多个子类
  2. 父类中有虚函数,子类重写虚函数()
  3. 用父类的指针或者是引用去操作子类对象,调用虚函数时会触发多态

结论:

   是所有事件类的父类

   QWidget是所有控件类的父类

==》所有与用户交流互的控件类都是继承于QWidget

控件我们要去操作,必然会有事件发生,有事件发生就会有事件对象产生;控件就需要去执行事件处理函数。

总结:当用户去操作某一个控件的时候的,就会产生对应的事件,以及事件对象,控件的对象就会去执行对应的事件处理函数!如果子类中没有去重写对应事件的虚函数的,会执行父类原本的事件处理函数;如果控件子类重写了对应的事件处理函数,就执行子类自己的!

   事件的产生是随机的,什么时候操作什么时候产生!

 

参数是 父类类型的指针

  子类事件对象的地址 传给 QEvent * 调用控件对应的事件处理函数,实现多态

注意: event事件一般我们不需要重写,因为他内部实现的很完善!

事件产生》event做事件分发(根据事件类型)--》执行对应的事件处理函数(有重写走重写,没重写走父类)》发送对应的信号-》关联对应的槽函数做业务处理!!!

信号与事件的关系???

信号是在事件中被触发的!!!信号的底层就是事件;信号的本质就是事件

鼠标事件

 

 键盘事件

 

 如果一个Widget里面的所有的控件现在都要屏蔽到键盘输入事件,每一个控件都要被继承,然后在子类中重写 event分发事件函数;-重写对应的事件处理函数,什么都不做!

 

绘图事件查找什么时候会触发paintEvent事件

只要界面发生变化:放大还是缩小,都会触发这个绘图事件

只有按下左键才可以操作

 

 

  1. 网络编程—TCP

复习网络编程

  1. 使用Tcp搭建服务器流程:
  1. 创建套接字  socket  本质是文件,连通用户空间和内核空间
  2. 绑定Ip和port   bind 
  3. 创建监听队列  listen
  4. 等待连接  accept 之前三次握手已经完成,内核帮你已经完成了
  5. 收发消息,进行通信  
  6. 关闭连接    
  1. 使用Tcp搭建客户端的流程:
  1. 创建套接字 socket
  2. 连接  connect
  3. 通信
  4. 关闭连接

    1. 使用QT搭建客户端和服务端

Network模块

QTcpServer----- 创建监听套接字,程序运行起来的时候就已经存在了

QTcpSocket ------创建连接套接字, 客户端有多少个,连接套接字就有多少个

分析:QT服务器端如何搭建呢?

  1. 创建 QTcpServer对象
  2. 绑定Ip和port 并监听       QTcpServer::listen
  3. 建立连接: QTcpServer 就有会有个newConnection信号,槽函数里面就要接收当前连接的这客户端的QTcpSocket对象的地址

服务端收发: 服务端发送 点击按钮,槽里面write

            服务器接收呢?QTcpSocket 会有一个信号产生—readyRead(缓存区有新数据进来就会产生这个信号)

            槽里面  readData();

  1. 关闭连接

分析:QT客户端端如何搭建呢?

  1. 创建QTcpSocket对象
  2. 连接   connected()
  3. 通信
  4. 关闭连接
    1. 使用Qt做客户端  Linux做服务器

Linux的服务器:

   传输文件信息

百度网盘:

     下载:向服务器发起请求:: 文件名

           服务器解析请求,然后传输文件信息给客户端

     上传

通信协议的设计:

  1. 客户端发送请求: pic#文件名

服务器接收:     解析  pic  文件名 -à获取文件大小===》

                 # 替换成\0

                 然后在循环发送图片的数据到缓存区 send   1024

  1. 服务器如何发数据给客户端:

反馈第一部分数据给客户端:pic_ack#图片大小

第二部分是文件的详细数据

  1. 客户端如何接收: readyRead---》readData

      <1>.先接收 服务器反馈的第一部分数据

      <2>.只要接收图片信息就可以了   

               何时接收图片信息结束:

                 判断接收到的数据的大小和图片的大小是否一样,如果一样,接收完毕,在界面上要展示图片信息

Read  或是readAll            

                               

线程

进程中有线程,同步去执行多任务。线程开销比较小

使用线程:

   创建线程

   执行线程的处理函数 ---回调函数

   线程退出  

在QT中使用线程

  1. 引入QThread线程类---run—执行线程对应的业务
  2. 继承于QThread类写一个线程类
  3. 重写run线程执行函数
  4. 创建线程类的对象
  5. 启动线程   start()--》自动的调用run函数
  6. 线程退出   quit
  7. 线程回收   wait

项目打包步骤:

  1. 将工程的运行模式由debug改成release 发布版本
  2. 构建目录记得取消

 

  1. 运行一下,保证程序是没有报错或者异常的

注意:在整个程序中特别是线程中不要出现空循环,尽量增加一个qdebug的输出

所有的数据成员变量记得在构造中初始化

  1. 找到工程中 release文件夹中的exe 拷贝到一个bin文件夹中
  2. 将工程中有引入过的图片资源、数据库相关的等都拷贝到 bin文件夹中

 

  1. 切换到bin目录下
  2. 输入 windeployqt  exe的名称
  3. 回车
  4. 打包完成,点击 exe肯是否可以正常运行
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值