QT学习(1)

QT基础知识学习

QT对象模型

QT中的对象树是组合设计模式,父对象保有所有子对象的指针(一个指针列表),因此父对象可以调用子对象实现的方法(重载的)。一层层的父子对象组成了对象树

信号和槽

是观察者模式
信号只声明,不用定义(由moc实现),槽就是一个普通函数,但可以和信号关联。
使用emit关键字“发射”信号

事件

事件和信号是不同的概念,事件是某种动作,QT的Widget组件都会处理事件,处理事件时发送某种信号,如clicked()等等

application类的exec函数处理事件循环,通过notify()来传递事件,最终被QObject::event()来接受和处理,event()函数通常会根据事件的类型,分别交由各种具体的事件处理函数来处理,如mousePressEvent()等等。

event()返回1接受不传递,0忽略并传递给父对象;
事件处理函数通过e->accept()和e->ignore()和event()通信

事件过滤器
有点像钩子,可以拦截事件。使用installEventFilter注册事件过滤器,然后事件过滤器类中实现eventFilter()函数实现“事件过滤”。当注册了多个事件过滤器后,事件会从最后一个过滤器流向第一个,最终回到“目标对象”(注册者)。当然中间可能会直接接受而停止后续处理。

首先按逆序调用事件过滤器,然后调用 event()函数,最后调用事件处理函数

其他

  1. 需确保每一个QObject生命周期被QApplication包含
    所以不可定义静态QObject对象
  2. 父对象会管理子对象的生命周期
    父对象应该在栈上创建,自行析构;子对象应该在堆中创建,由父对象管理(析构),否则会被删除两次。
  3. 模态与非模态对话框
    模态:使用exec(),冻结其他窗口的交互,处理完当前对话框后才继续;非模态:使用show(),可以和其他窗口继续交互
  4. 信号自动连接
  • 槽函数命名规范:void on_<object name>_<signal name>(<signal parameters>);
  • 例如void on_button1_clicked();
  • 参考:https://zhuanlan.zhihu.com/p/687855578
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值