当前位置:   article > 正文

QT设计模式:外观模式

QT设计模式:外观模式

基本概念

外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一群接口,从而简化了客户端与子系统之间的交互,这种方式隐藏了子系统的复杂性,使客户端更容易使用子系统。

外观模式需要实现的部分为:

  • Facade(外观类):提供一个简单的接口,用于访问子系统中的一群接口。
  • Subsystem(子系统类):实现子系统的功能,被外观类所调用。

适用场景

  • 当需要为复杂的子系统提供一个简单的接口时。
  • 当需要将子系统与客户端解耦时,使得子系统的改变不会影响到客户端。
  • 需要减少系统中类与类直接的直接依赖关系时。

实现

QWidget 的 resize 函数

总所周知,当 QWidget 使用 resize() 改变其大小时,其所有子类的Widget都会改变大小,这正是外观模式中,通过一个简单接口来实现子系统的一群接口的案例。

源码如下:

  1. void QWidget::resize(const QSize &s)
  2. {
  3. //声明 d 为指向 QWidget 的私有数据的指针
  4. Q_D(QWidget);
  5. setAttribute(Qt::WA_Resized);
  6. if (testAttribute(Qt::WA_WState_Created)) {
  7. //修改 d 指针的大小
  8. d->fixPosIncludesFrame();
  9. d->setGeometry_sys(geometry().x(), geometry().y(), s.width(), s.height(), false);
  10. d->setDirtyOpaqueRegion();
  11. } else {
  12. const auto oldRect = data->crect;
  13. data->crect.setSize(s.boundedTo(maximumSize()).expandedTo(minimumSize()));
  14. if (oldRect != data->crect)
  15. setAttribute(Qt::WA_PendingResizeEvent);
  16. }
  17. }

如代码所示,Q_D(QWidget);是一个宏,它指向声明 d 为 QWidget 的私有数据的指针,然后在改变d指针的大小,实现了外观模式

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/562986
推荐阅读
相关标签
  

闽ICP备14008679号