自己理解核心:
QT主要是绑定信号和槽,利用按键触发的事件或信号调用函数解决问题的东西
按键不多,但是按键的一些方法复杂繁多,反正我记住的基本为零.
父对象: 和继承没有关系
比如btn对象,想显示在 背景对象之上,btn对象要把parent对象
设置为 背景对象.
qt会按照这套规则, 让子对象显示在父对象之上.
qt在显示父对象的时候,也同时会显示 父对象的所有子对象.
控件继承关系:
所有的小控件,都继承自 QWidget,它实现了背景
qt所有的类,都继承自 QOBject类,这是一个 qt的基础类, 内部实现了 对象树(父对象 子对象), 信号和槽
GUI工作原理: 主进程持续监控 窗口的事件,一旦发现有事件产生则立即处理.
事件有很多种, 鼠标--进入 离开 左击 右击 中击 滑动 划过.. 键盘-按下 弹起 ...
事件和信号关系:
对一个控件来说,来自外部的操作(点击 双击 滑动 划过)称为 事件event
当某控件收到 事件之后,可以内部发出信号,通知其他对象
信号是基于事件实现的.
事件好处:
让某些控件拥有更丰富的操作 1)label增加 进入离开的操作,点击 2)给对象增加右击处理
一个对象如何去捕获/处理 事件event?????
对象:QWidget:QObject(实现了event的捕获和处理)
当你操作某个对象(控件)的时候,比如按钮,被主进程捕获,主进程创建一个eventObj对象,描述了
你刚才的操作(比如划过 点击 位置), 然后主进程会调用 被操作对象(按钮)的
btn.event(eventObj) ,被操作对象(按钮) 重写该函数,完成自己的需要.
一般对象可以不重新写 OBject::event(QEvent *), 使用默认的.
默认的event函数会干嘛呢?? 根据QEvent类型(划过 点击 双击 离开)调用QWeidget内部
各种函数,当然这些函数可以继续被子对象 重写,因为他们全都是virtual.
对象如何实现捕获信号和处理特定信号呢:
方法1: 对象,继承QLable/QButton/...., 重写内部的 事件处理函数即可.
优点: 好理解
缺点: 因为要自己实现新类, 所以无法使用ui工具来创建界面
方法2: 事件过滤器 eventFilter
子对象收到事件,可以 把事件交给父对象进行统一处理的.
原理: 当你对子对象进行操作,子对象优先调用 父对象的 eventFilter()事件函数进行处理
父对象在函数中处理该事件,如果能够完全处理,处理完毕.
如果父对象发现处理不了,还得交给子对象进行处理.
如何做:
首先子对象(QLabel QButton)将自己的事件处理权利 交给父对象(窗体Widget),qt内部做好记录.
sub.交给别人的函数( 父亲的指针 )
btn.installEventFilter( 父指针 );
以后子对象发生的任何事情,主进程都会优先找到 父对象,执行父对象(窗体)的QObject::eventFilter来处理.
父对象(窗体Widget)重写 eventFilter函数
优点: 可以使用ui工具,而且这些事件可以统一处理
缺点: 实现起来要复杂
网络最重要的是 需要在 工程.pro中,添加 QT += network
其他的东西嘛,结构和C的网络差不多,都是建立连接,然后发送信息和接收信息