QT设计模式:装饰器模式

server/2024/12/22 9:58:50/

基本概念

装饰器模式(Decorator Pattern)是一种结构型设计模式,它允许向现有对象添加新功能,又不改变其结构。通过将对象放入包装器中,然后用装饰器对象包裹原始对象,以提供额外的功能。

装饰器模式需要实现的部分为:

  • Component(被装饰对象的基类):定义一个对象接口,可以动态地给这些对象添加新的职责。
  • ConcreteComponent(具体被装饰对象):实现Component接口的具体对象,即被装饰的对象。
  • Decorator(装饰者抽象类):继承自Component,用于给 ConcreteComponent 添加新的职责。
  • ConcreteDecorator(具体装饰类):扩展Decorator类,实现具体的装饰功能。

使用场景

  • 当需要动态地给对象添加额外的功能,而又不希望改变其结构时。
  • 当需要为对象的部分功能或属性添加或移除时。
  • 当继承不太合适时。

实现

QT的文本处理

使用 QTextDocument 类来处理文本内容时通过装饰器模式,可以创建不同的装饰器来实现文本的格式化、排版、高亮等功能,从而实现文本的多样化显示效果。

  • 被装饰对象: QTextDocument 是具体的文本组件,它提供了文本内容的基本功能。
  • 装饰者抽象类:QTextFormat 类是 QTextCursor 对象的属性,用于控制文本的格式.
  • 具体装饰类:QTextBlockFormat ,QTextCharFormat 类等是 QTextFormat 类的子类,负责实现具体的文字装饰功能。
    #include <QApplication>
    #include <QTextDocument>
    #include <QTextEdit>int main(int argc, char *argv[]) {QApplication app(argc, argv);//被装饰对象QTextDocument document;QTextCursor cursor(&document);cursor.insertText("Hello, World!");//具体装饰器QTextCharFormat colorFormat;colorFormat.setForeground(Qt::red); QTextBlockFormat blockFormat;blockFormat.setLeftMargin(1);blockFormat.setRightMargin(1);cursor.setPosition(0); cursor. Select(QTextCursor::Document); // 应用装饰cursor.setCharFormat(colorFormat); cursor.setBlockFormat(blockFormat);// 显示文本QTextEdit textEdit;textEdit.setDocument(&document);textEdit.show();return app.exec();
    }
    


http://www.ppmy.cn/server/40431.html

相关文章

01-new SpringApplication

准备配置Bean Configuration public class TestSpringApplication {static class Bean1 {}static class Bean2 {}static class Bean3 {}Beanpublic Bean2 bean2() {return new Bean2();}Beanpublic TomcatServletWebServerFactory tomcatServletWebServerFactory() {return ne…

Leetcode 3148. Maximum Difference Score in a Grid

Leetcode 3148. Maximum Difference Score in a Grid 1. 解题思路2. 代码实现 题目链接&#xff1a;3148. Maximum Difference Score in a Grid 1. 解题思路 这一题的话算是一个脑筋急转弯的题目吧&#xff0c;本质上就是求各个坐标下其右下方矩阵当中除自己外最大的元素是多…

Redis进阶学习

Redis进阶学习 一、Redis事务1.2 Redis监控1.3 Jedis连接1.4 SpringBoot整合1.5 自定义RedisTemple1.6 Redis.conf详解 二、 Redis持久化2.1 RDB2.2 AOF进程 三、Redis发布订阅3.1 Redis主从复制3.2 集群环境配置3.3、复制原理3.4、宕机后主动变为主机3.5、哨兵模式 四、Redis缓…

ID-Aligner:通过奖励反馈学习提升身份保持文本到图像生成的性能

在人工智能领域&#xff0c;文本到图像生成&#xff08;Text-to-Image Generation&#xff0c;简称T2I&#xff09;技术近年来取得了显著进展&#xff0c;特别是在身份保持的图像生成方面&#xff0c;即生成与特定人物参考图像相匹配的新图像。这一技术在AI肖像、广告、动画和虚…

课时122:awk实践_进阶知识_赋值运算

1.2.1 赋值运算 学习目标 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习 基础知识 简介 awk本质上属于一种编程语言&#xff0c;所以它具有编程语言的一般功能&#xff0c;表达式、流程控制等基本上都在awk中具有想当程度的使用。这一节我们学习awk进…

手工创建 kamailio database tables

有些场景可能需要手工创建 kamailio database table&#xff0c;可参考下面的命令序列&#xff1a; use mysql select user,host from user; drop user kamailio%; flush privileges; drop database kamailio; create database kamailio; create user kamailio% identified by …

【pandas】库中的apply(lambda function ,arix)

pandas.apply() 遍历DataFrame的元素&#xff08;一行或者一列数据&#xff09; 行遍历&#xff1a;axis 1 列遍历&#xff1a;axis 0 基础信息 pandas的apply()方法是用来调用一个lambda函数&#xff0c;让函数对数据对象具有批处理的特性。 pandas支持apply()调用…

Java设计模式-工厂

Java设计模式中&#xff0c;工厂模式主要包括普通工厂模式以及抽象工厂模式&#xff0c;普通工厂模式是用于制造输出不同类型的对象&#xff0c;抽象工厂模式是用于制造输出不同类型的普通工厂&#xff0c;本文主要描述工厂模式的基本用法。 如上所示&#xff0c;使用普通工厂模…