Qt——自定义富文本RichText

2024-04-25 21:04
文章标签 自定义 qt 文本 richtext

本文主要是介绍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("Operation recorder"));auto titleLabel = new NemuUiLib::NemuRichText2(title, font, this);titleLabel->setFixedWidth(titleLabel->adaptiveWidth(tr("Operation recorder"),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。

这篇关于Qt——自定义富文本RichText的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/935782

相关文章

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出

基于Qt Qml实现时间轴组件

《基于QtQml实现时间轴组件》时间轴组件是现代用户界面中常见的元素,用于按时间顺序展示事件,本文主要为大家详细介绍了如何使用Qml实现一个简单的时间轴组件,需要的可以参考下... 目录写在前面效果图组件概述实现细节1. 组件结构2. 属性定义3. 数据模型4. 事件项的添加和排序5. 事件项的渲染如何使用

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

SpringBoot 自定义消息转换器使用详解

《SpringBoot自定义消息转换器使用详解》本文详细介绍了SpringBoot消息转换器的知识,并通过案例操作演示了如何进行自定义消息转换器的定制开发和使用,感兴趣的朋友一起看看吧... 目录一、前言二、SpringBoot 内容协商介绍2.1 什么是内容协商2.2 内容协商机制深入理解2.2.1 内容

python与QT联合的详细步骤记录

《python与QT联合的详细步骤记录》:本文主要介绍python与QT联合的详细步骤,文章还展示了如何在Python中调用QT的.ui文件来实现GUI界面,并介绍了多窗口的应用,文中通过代码介绍... 目录一、文章简介二、安装pyqt5三、GUI页面设计四、python的使用python文件创建pytho

Java操作xls替换文本或图片的功能实现

《Java操作xls替换文本或图片的功能实现》这篇文章主要给大家介绍了关于Java操作xls替换文本或图片功能实现的相关资料,文中通过示例代码讲解了文件上传、文件处理和Excel文件生成,需要的朋友可... 目录准备xls模板文件:template.xls准备需要替换的图片和数据功能实现包声明与导入类声明与

QT实现TCP客户端自动连接

《QT实现TCP客户端自动连接》这篇文章主要为大家详细介绍了QT中一个TCP客户端自动连接的测试模型,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录版本 1:没有取消按钮 测试效果测试代码版本 2:有取消按钮测试效果测试代码版本 1:没有取消按钮 测试效果缺陷:无法手动停

python解析HTML并提取span标签中的文本

《python解析HTML并提取span标签中的文本》在网页开发和数据抓取过程中,我们经常需要从HTML页面中提取信息,尤其是span元素中的文本,span标签是一个行内元素,通常用于包装一小段文本或... 目录一、安装相关依赖二、html 页面结构三、使用 BeautifulSoup javascript

基于Qt实现系统主题感知功能

《基于Qt实现系统主题感知功能》在现代桌面应用程序开发中,系统主题感知是一项重要的功能,它使得应用程序能够根据用户的系统主题设置(如深色模式或浅色模式)自动调整其外观,Qt作为一个跨平台的C++图形用... 目录【正文开始】一、使用效果二、系统主题感知助手类(SystemThemeHelper)三、实现细节

Qt实现文件的压缩和解压缩操作

《Qt实现文件的压缩和解压缩操作》这篇文章主要为大家详细介绍了如何使用Qt库中的QZipReader和QZipWriter实现文件的压缩和解压缩功能,文中的示例代码简洁易懂,需要的可以参考一下... 目录一、实现方式二、具体步骤1、在.pro文件中添加模块gui-private2、通过QObject方式创建