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

相关文章

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

自定义类型:结构体(续)

目录 一. 结构体的内存对齐 1.1 为什么存在内存对齐? 1.2 修改默认对齐数 二. 结构体传参 三. 结构体实现位段 一. 结构体的内存对齐 在前面的文章里我们已经讲过一部分的内存对齐的知识,并举出了两个例子,我们再举出两个例子继续说明: struct S3{double a;int b;char c;};int mian(){printf("%zd\n",s

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

Oracle type (自定义类型的使用)

oracle - type   type定义: oracle中自定义数据类型 oracle中有基本的数据类型,如number,varchar2,date,numeric,float....但有时候我们需要特殊的格式, 如将name定义为(firstname,lastname)的形式,我们想把这个作为一个表的一列看待,这时候就要我们自己定义一个数据类型 格式 :create or repla

【QT】基础入门学习

文章目录 浅析Qt应用程序的主函数使用qDebug()函数常用快捷键Qt 编码风格信号槽连接模型实现方案 信号和槽的工作机制Qt对象树机制 浅析Qt应用程序的主函数 #include "mywindow.h"#include <QApplication>// 程序的入口int main(int argc, char *argv[]){// argc是命令行参数个数,argv是

Python QT实现A-star寻路算法

目录 1、界面使用方法 2、注意事项 3、补充说明 用Qt5搭建一个图形化测试寻路算法的测试环境。 1、界面使用方法 设定起点: 鼠标左键双击,设定红色的起点。左键双击设定起点,用红色标记。 设定终点: 鼠标右键双击,设定蓝色的终点。右键双击设定终点,用蓝色标记。 设置障碍点: 鼠标左键或者右键按着不放,拖动可以设置黑色的障碍点。按住左键或右键并拖动,设置一系列黑色障碍点

使用Qt编程QtNetwork无法使用

使用 VS 构建 Qt 项目时 QtNetwork 无法使用的问题 - 摘叶飞镖 - 博客园 (cnblogs.com) 另外,强烈建议在使用QNetworkAccessManager之前看看这篇文章: Qt 之 QNetworkAccessManager踏坑记录-CSDN博客 C++ Qt开发:QNetworkAccessManager网络接口组件 阅读目录 1.1 通用API函数

HTML5自定义属性对象Dataset

原文转自HTML5自定义属性对象Dataset简介 一、html5 自定义属性介绍 之前翻译的“你必须知道的28个HTML5特征、窍门和技术”一文中对于HTML5中自定义合法属性data-已经做过些介绍,就是在HTML5中我们可以使用data-前缀设置我们需要的自定义属性,来进行一些数据的存放,例如我们要在一个文字按钮上存放相对应的id: <a href="javascript:" d

Level3 — PART 3 — 自然语言处理与文本分析

目录 自然语言处理概要 分词与词性标注 N-Gram 分词 分词及词性标注的难点 法则式分词法 全切分 FMM和BMM Bi-direction MM 优缺点 统计式分词法 N-Gram概率模型 HMM概率模型 词性标注(Part-of-Speech Tagging) HMM 文本挖掘概要 信息检索(Information Retrieval) 全文扫描 关键词