赞
踩
外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一群接口,从而简化了客户端与子系统之间的交互,这种方式隐藏了子系统的复杂性,使客户端更容易使用子系统。
外观模式需要实现的部分为:
总所周知,当 QWidget 使用 resize() 改变其大小时,其所有子类的Widget都会改变大小,这正是外观模式中,通过一个简单接口来实现子系统的一群接口的案例。
源码如下:
- void QWidget::resize(const QSize &s)
- {
- //声明 d 为指向 QWidget 的私有数据的指针
- Q_D(QWidget);
- setAttribute(Qt::WA_Resized);
- if (testAttribute(Qt::WA_WState_Created)) {
- //修改 d 指针的大小
- d->fixPosIncludesFrame();
- d->setGeometry_sys(geometry().x(), geometry().y(), s.width(), s.height(), false);
- d->setDirtyOpaqueRegion();
- } else {
- const auto oldRect = data->crect;
- data->crect.setSize(s.boundedTo(maximumSize()).expandedTo(minimumSize()));
- if (oldRect != data->crect)
- setAttribute(Qt::WA_PendingResizeEvent);
- }
- }
如代码所示,Q_D(QWidget);
是一个宏,它指向声明 d 为 QWidget 的私有数据的指针,然后在改变d指针的大小,实现了外观模式
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。