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。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python中如何用matplotlib写雷达图

#代码 import numpy as np # import matplotlib as plt # from matplotlib import pyplot as plt import matplotlib.pyplot as pltplt.rcParams[font.sans-serif].insert(0, SimHei) plt.rcParams[axes.unicode_minus] Falselabels np.array([速度, 力量, 经验, 防守, 发球…

迅雷不限速破解方法

背景&#xff1a;现在迅雷和百度云的下载速度真的太恶心了&#xff0c;所以总有大佬可以采用厉害的方法进行破解&#xff0c;在网上看了一圈&#xff0c;很多都是骗人或者是无效的&#xff0c;找了一个靠谱的方法&#xff0c;亲测速度能达到10M以上&#xff0c;非常给力。 以下…

数据库工程师的工作职责(合集)

数据库工程师的工作职责1 职责&#xff1a; 1. 日常数据库的基本安装&#xff0c;维护&#xff0c;升级&#xff0c;监控的; 2. 配合研发部门进行数据库设计支持&#xff0c;协助开发、设计和进行SQL语言优化; 3. 配合相关部门数据库相关的任务&#xff0c;比如数据导入导出&am…

怎么使用下载视频号视频?详细视频下载使用教程

越来越多的人开始使用视频号等平台来分享和观看视频内容。然而&#xff0c;有时候我们可能会遇到需要将视频保存到本地设备以便离线观看或进一步编辑的情况。 本文将为您详细介绍如何使用视频下载plus&#xff0c;来下载视频号的视频内容。 一、了解视频号下载功能 首先&…

SublimeText - 汉化插件安装教程

第一步&#xff1a;快捷键CTRLShiftp&#xff0c;&#xff08;如果是Mac&#xff0c;则是command Shiftp&#xff09; 弹出查找栏—找到 install Package&#xff0c;并点击选择。 如下图&#xff1a; 第二步&#xff1a;再次弹出的框中&#xff0c;选择 ChineseLocalizations…

飞鹤与满趣健达成战略合作 加速深化国际化布局

继获得加拿大地区首张婴幼儿配方奶粉生产执照后&#xff0c;中国飞鹤的海外征途再添新动作。4月25日&#xff0c;中国飞鹤加拿大皇家妙克与美国婴童用品巨头满趣健&#xff08;Munchkin&#xff09;在北京正式达成战略合作。此次合作彰显了中国乳企的硬核实力&#xff0c;也是飞…

前后缀分离,CF1209 C. Maximal Intersection

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 1029C - Codeforces 二、解题报告 1、思路分析 线段相交具有可…

亚马逊风控有哪些?如何在账号风控种避免封号?

如今商业竞争愈发激烈的时代&#xff0c;数据的准确性和可靠性已经成为商家和消费者共同追求的目标。为了达到这一目标&#xff0c;亚马逊采取了一系列风险管控措施&#xff0c;旨在杜绝恶意行为、虚假交易等违规情况&#xff0c;从而确保交易在平台上的安全与诚信。许多亚马逊…

汇隆晶片授权世强硬创,代理产品工作温度范围覆盖工业/车规/航天级

凭借独特的线上线下技术分销以及团队优异的推新能力&#xff0c;世强先进&#xff08;深圳&#xff09;科技股份有限公司&#xff08;下称“世强先进”&#xff09;获得浙江汇隆晶片技术有限公司&#xff08;下称“汇隆晶片”&#xff0c;英文名&#xff1a;HLC&#xff09;授权…

【JAVA】一文掌握Java并发编程

Java 开发中&#xff0c;并发编程属于相当重要的一个知识点&#xff0c;可以说&#xff0c;Java 的并发能力&#xff0c;是成就今日 Java 地位的因素之一。Java 的并发编程由浅入深实质上是包含 Java&#xff08;API&#xff09;层、JVM&#xff08;虚拟机&#xff09;层、内核…

网络攻击近在咫尺:数据加密与SSL成为信息安全之盾

随着互联网的日益普及和科技的迅猛发展&#xff0c;网络攻击已经成为信息安全领域面临的一大难题。近期&#xff0c;一场网络安全实验让我们对网络攻击有了更为深刻的认识。在实验中&#xff0c;网络安全工程师通过模拟攻击&#xff0c;展示了木马植入、文件浏览、键盘监听、病…

激活IDM下载器并配置百度网盘

前言&#xff1a; 最近想下载一些软件&#xff0c;奈何不充钱的百度网盘的速度实在太慢了&#xff0c;不到一个G的文件夹奈何下了一晚上&#xff0c;只能重新找一下idm的下载了。 但是idm的正版是需要收费的&#xff0c;所以有白嫖党的破解版就横空出世了。 正文&#xff1a…

JavaEE——Spring Boot + jwt

目录 什么是Spring Boot jwt&#xff1f; 如何实现Spring Boot jwt&#xff1a; 1. 添加依赖 2、创建JWT工具类 3. 定义认证逻辑 4. 添加过滤器 5、 http请求测试 什么是Spring Boot jwt&#xff1f; Spring Boot和JWT&#xff08;JSON Web Token&#xff09;是一对常…

HarmonyOS hsp制作与引用

1. HarmonyOS hsp制作与引用 1.1 介绍 HSP动态共享包&#xff08;模块&#xff09;,应用内HSP指的是专门为某一应用开发的HSP&#xff0c;只能被该应用内部其他HAP/HSP使用&#xff0c;用于应用内部代码、资源的共享。应用内HSP跟随其宿主应用的APP包一起发布&#xff0c;与该…

阶跃星辰:探索智能科技的星辰大海

引言 在当今快速发展的科技时代&#xff0c;人工智能已经成为推动社会进步的重要力量。阶跃星辰&#xff0c;正是在这一背景下诞生的。 阶跃星辰是一家专注于通用人工智能探索的公司&#xff0c;成立于2023年4月。该公司的创始团队由一群对人工智能充满热情和渴望的人组成&am…

【Python】异常、模块与包

目录 捕获异常 异常的传递 Python中的模块 模块的导入方式 as定义别名 自定义模块 Python包 第三方包 综合案例 当我们的程序遇到了BUG, 那么接下来有两种情况: ① 整个程序因为一个BUG停止运行 ② 对BUG进行提醒, 整个程序继续运行 但是在真实工作中, 我们肯定不能…

快解析搭建网站解决方案

在如今网络时代下&#xff0c;各行各业都需要有自己的门户网站。 企业搭建自己的门户网站&#xff0c;有着众多实际意义: 1.可以全面详细地介绍企业及企业产品&#xff0c;这是企业网站的一个最基本的功能。企业可以把任何想让大众知道的信息放到网站&#xff0c;当人们想知道…

http忽略ssl认证

我们在发请求时&#xff0c;会遇到需要ssl证书验证的报错&#xff0c;针对该错误以及所使用的不同的创建连接的方式&#xff0c;进行ssl证书忽略 忽略SSL证书的流程 简介&#xff1a;需要告诉client使用一个不同的TrustManager。TrustManager是一个检查给定的证书是否有效的类…

pytest参数化数据驱动(数据库/execl/yaml)

常见的数据驱动 数据结构&#xff1a; 列表、字典、json串 文件&#xff1a; txt、csv、excel 数据库&#xff1a; 数据库链接 数据库提取 参数化&#xff1a; pytest.mark.parametrize() pytest.fixture()…

vue3.0项目中运用vant的以及移动端的适配

文章目录 概要移动端的适配vant的引入开发以及打包过程中遇到的问题 概要 在Vue-Vben-Admin项目中运用vant-ui实现部分页面支持手机端h5页面的预览 移动端的适配 适配的原理 自适应 根据不同的设备的屏幕大小来自动调整尺寸&#xff0c;大小响应式 会随着屏幕的变动而自动调整…
最新文章