Qt——自定义富文本RichText

作者:小 琛
欢迎转载,请标明出处

文章目录

    • 产品中的富文本
    • 富文本控件会面临的问题
    • QTextBrowser
    • 例子:自定义富文本

产品中的富文本

用户界面中支持显示富文本格式(如加粗、斜体、不同颜色、超链接等)的文本内容。这种富文本的支持能够提供更加丰富和多样化的文本显示效果,从而增强用户体验。

富文本控件会面临的问题

  1. 多语言问题:大多数产品,会有多种语言,同样的表达不同的语言会导致控件长度不同,因此需要自定义控件支持自适应
  2. 样式自定义:文字类型、颜色、风格

QTextBrowser

QTextBrowser 是 Qt 框架中的一个小部件(widget),用于显示富文本和超链接文本。它是一个用于显示文本内容的可编辑小部件,支持显示富文本格式,并且可以包含超链接,允许用户点击链接来执行相关操作。

QTextBrowser 允许开发者在应用程序中以富文本的方式显示文本内容,比如格式化的文字、图像、超链接等,并且支持用户交互。它是一个非编辑的小部件,用户无法直接编辑其中的文本内容,但可以选择和复制其中的文本,并且可以点击其中的超链接来进行跳转等操作。

相较于 QTextEdit,QTextBrowser 更适用于显示只读的富文本内容,而不是用于用户编辑的目的。它也比较适合用于显示带有超链接的富文本内容,比如显示文字中的URL链接或者HTML文本中的超链接等。

在Qt应用程序中,QTextBrowser 可以用于显示格式化的帮助文档、显示静态的富文本内容、显示HTML文本等。它提供了一种简单而有效的方式,使得在界面中显示富文本内容变得更加方便和实用。

例子:自定义富文本

#pragma once
#include <QTextBrowser>class MyRichText2 : public QTextBrowser {
public:MyRichText2 (const QString& text, const QFont& font, QWidget* parent = nullptr);~MyRichText2 () = default;void updateText(const QString& text);int adaptiveWidth(const QString& text, const QFont& font);protected:void resizeEvent(QResizeEvent* event) override;private:QSize textSize(const QString& text, const QFont& font);private:QString text_;
};
#include <QPaintEvent>
#include <QPainter>MyRichText2 ::MyRichText2 (const QString& text, const QFont& font, QWidget* parent) : QTextBrowser(parent) {setFont(font);setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);setTextInteractionFlags(Qt::LinksAccessibleByMouse);setFocusPolicy(Qt::NoFocus);setContextMenuPolicy(Qt::ContextMenuPolicy::NoContextMenu);setOpenLinks(true);setOpenExternalLinks(true);setStyleSheet(QString("QTextBrowser{border: 0px; background-color: transparent;}"));document()->setDocumentMargin(0);updateText(text);
}void MyRichText2 ::updateText(const QString& text) {text_ = text;setHtml(text);document()->setTextWidth(width());setFixedHeight(document()->size().height());
}int MyRichText2 ::adaptiveWidth(const QString& text, const QFont& font) {return (textSize(text, font).width() + 2);
}void MyRichText2 ::resizeEvent(QResizeEvent* event) {updateText(text_);QTextBrowser::resizeEvent(event);
}QSize MyRichText2::textSize(const QString& text, const QFont& font) {const QFontMetrics metrics(font);const int width = metrics.width(text);const int height = metrics.height();return {width, height};
}
    QFont font("Microsoft YaHei, Microsoft Sans Serif");font.setPixelSize(14);auto title = QString("<p align=\"left\" style=\"color: %1;\">%2</p>").arg(font.name(QColor::HexArgb)).arg(tr("testing"));auto titleLabel = new MyRichText2(title, font, this);titleLabel->setFixedWidth(titleLabel->adaptiveWidth(tr("testing"),font));titleLabel->setAttribute(Qt::WA_TransparentForMouseEvents);
  • 构造函数的定义,它接受三个参数:
    text: 要显示的文本内容
    font: 要使用的字体
    parent: 父 Widget
  • setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); 和 setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);:
    设置垂直和水平滚动条策略为始终隐藏。
  • setTextInteractionFlags(Qt::LinksAccessibleByMouse);:
    设置文本交互标志,使得文本中的链接可以通过鼠标访问。
  • setFocusPolicy(Qt::NoFocus);:
    设置焦点策略为无焦点,即该控件不能获得焦点。
  • setContextMenuPolicy(Qt::ContextMenuPolicy::NoContextMenu);:
    设置上下文菜单策略为无上下文菜单,即禁用了控件的右键菜单。
  • setOpenLinks(true); 和 setOpenExternalLinks(true);:
    设置是否打开链接和外部链接。
  • setStyleSheet(QString(“QTextBrowser{border: 0px; background-color: transparent;}”));:
    设置控件的样式表,去掉边框并设置背景为透明。
  • document()->setDocumentMargin(0);:
    设置文档的边距为 0。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/4857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

盲人手机导航:科技之光引领无障碍出行新纪元

在这个日新月异的数字时代&#xff0c;科技不仅改变了我们获取信息的方式&#xff0c;更在无声中拓宽了视障人士的生活半径。盲人手机导航这一创新技术&#xff0c;正逐步成为他们探索世界、实现独立出行的重要伙伴。 对于大多数人而言&#xff0c;日常出行或许只是一次…

数据赋能(70)——概念:数据赋能业务过程的绩效评价

数据赋能业务过程的绩效评价涉及多个方面&#xff0c;这些方面共同构成了对业务过程中数据利用效果的综合评估。 以下是主要的绩效评价方面&#xff1a; 数据质量与准确性&#xff1a;评价数据收集、清洗和预处理过程的效率和准确性&#xff0c;确保所使用的数据是高质量、可靠…

四信数字孪生水库解决方案,加快构建现代化水库运行管理矩阵

近年&#xff0c;水利部先后出台《关于加快构建现代化水库运行管理矩阵的指导意见》与《构建现代化水库运行管理矩阵先行先试工作方案》等文件&#xff0c;明确总体要求及试点水库、先行区域建设技术要求等&#xff0c;为全面推进现代化水库运行管理矩阵建设工作提供依据。 《2…

Eureka基础知识

Eureka是Netflix开源的一个服务发现框架&#xff0c;主要用于构建基于微服务架构的应用程序。它允许服务实例自动注册和发现&#xff0c;从而实现了服务之间的协调和通信。Eureka的设计目标是简单、可靠和高可用的服务注册和发现。 在微服务架构中&#xff0c;Eureka扮演了两个…

“科技让广告更精彩”四川迈瑞斯文化传媒有限公司 行业领先的一站式媒体采购供应平台

国际数字影像产业园与园区企业一同推动数字影像技术的创新与发展&#xff0c;为数字影像产业注入新的活力。其中&#xff0c;四川迈瑞斯文化传媒有限公司&#xff08;906&#xff09;作为数字媒体行业的优秀企业&#xff0c;坚持“科技让广告更精彩”的理念&#xff0c;致力于为…

不完全微分PD控制器(CODESYS源代码+算法详细介绍)

完全微分计算公式为Kp*Td/Ts(e(k)-e(k-1))。有关位置式PID和增量式PID更多相关内容,大家可以参考下面的文章链接: 1、CODESYS位置式PID CODESYS位置式PID(完整ST源代码)_codesys pid功能块-CSDN博客文章浏览阅读1.1k次,点赞2次,收藏2次。CODESYS增量式PID完整源代码请参看…

最新 COCO数据集的下载、使用方法demo最新详细教程

&#x1f4f8; 最新 COCO数据集的下载、使用方法demo最新详细教程 &#x1f310; 文章目录 &#x1f4f8; 最新 COCO数据集的下载、使用方法demo最新详细教程 &#x1f310;摘要引言正文&#x1f4d8; COCO数据集概览&#x1f680; 下载和设置COCO数据集环境准备下载数据集 &am…

C++之入门

文章目录 1、前言2、C的关键字2.1C语言32关键字2.2C关键字(63个) 3、命名空间4、输入输出(cout、cin)4、缺省参数5、函数重载6 引用6.1 引用的定义6.2 引用的特性6.3引用的使用场景6.4 实际例子6.5、总结 7、内联函数8、auto关键字9、nullptr关键字 1、前言 C语言是结构化和模…

Node.js和cnpm环境搭建

中州养老项目:前端环境搭建&#xff0c;Node.js和cnpm 一、nodejs安装 1.1 傻瓜式一直下一步即可&#xff0c;不需要额外进行任何配置 nodejs下载链接&#xff0c;提取码&#xff1a;5555 1.2 查看是否安装成功 cmd进入命令行界面 输入node -v 显示node版本&#xff0c;显示…

GO 的 Web 开发系列(八)—— Gin 自定义 Html 渲染实现多租户的模板设计

本文主要解决在多租户场景下的模板渲染问题。 正常情况下 Gin 配置的所有模板都属于同一个模板组合,相同名称的模板将相互覆盖。在未通过 define 指定模板名称时,同名模板文件也将相互覆盖。自定义函数中也无法区分租户,这将非常不方便我们进行多租户的模板渲染处理。通过自…

如何将本地项目上传到Github(SSH方式)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

Win linux 下配置adb fastboot

一、Win配置adb & fastboot 环境变量 主机&#xff1a;Win10&#xff0c;除了adb fastboot需要设置变量之外&#xff0c;驱动直接安装即可 win下adb fastboot 下载地址&#xff1a;https://download.csdn.net/download/u012627628/89215420 win下qcom设备驱动下载地址&a…

STM32-TIM的输入捕获功能

1.熟练掌握TIM的参数配置&#xff0c; 2.熟练掌握输入通道的参数配置。 3.深刻理解输入捕获的原理和应用范畴。 4.理解输入捕获的原理。 一 什么是输入捕获功能 定时器输入捕获功能&#xff08; input capture &#xff09;是利用定时器的精准计数特性&#xff0c;实现对于…

Docker基本操作 Linux里边操作

docker镜像操作命令: docker images:查看所有镜像; docker rmi:删除镜像 后边可以跟镜像的名字或者id指定要删除的镜像&#xff1b; docker pull:拉取镜像&#xff1b; docker push:推送镜像到服务&#xff1b; docker save :打包镜像 后边有用法; docker load:加载镜像&…

数据复制的艺术:深拷贝与浅拷贝在JavaScript中的实现方式

前言 &#x1f4eb; 大家好&#xff0c;我是南木元元&#xff0c;热爱技术和分享&#xff0c;欢迎大家交流&#xff0c;一起学习进步&#xff01; &#x1f345; 个人主页&#xff1a;南木元元 目录 赋值和拷贝 浅拷贝与深拷贝区别 浅拷贝的实现方式 1.Object.assign() 2.…

【bug已解决】发生错误,导致虚拟 CPU 进入关闭状态。如果虚拟机外部发生此错误,则可能已导致物理计算机重新启动......

本bug报错已找到原因,并成功解决。 项目场景: vmware安装ubuntu报错。 如下: 发生错误,导致虚拟 CPU 进入关闭状态。如果虚拟机外部发生此错误,则可能已导致物理计算机重新启动。错误配置虚拟机、客户机操作系统中的错误或 VMware Workstation 中的问题都可以导致关闭状…

Docker有哪些常见命令?什么是Docker数据卷?

喜欢就点击上方关注我们吧&#xff01; 哈喽&#xff0c;大家好呀&#xff01;这里是码农后端。上一篇我们介绍了Docker的安装以及腾讯云镜像加速源的配置。本篇将带你学习Docker的常见命令、数据卷及自定义镜像等相关知识。 1、什么是镜像与容器&#xff1f; 利用Docker安装应…

提示词工程入门-使用文心一言4.0-通义千问-GPT4-Claude3通用提示技巧测试

提示词工程基础&#x1f680; 在了解完了大语模型的基本知识&#xff0c;例如API的使用多轮对话&#xff0c;流式输出&#xff0c;微调&#xff0c;知识向量库等知识之后&#xff0c;接下来需要进一步补足的一个大块就是提示词工程&#xff0c;学习和了解提示词工程除了基本的提…