Qt显示数学公式

news2024/9/25 1:17:41

文章目录

  • 一、前言
  • 二、效果展示
  • 三、库文件
  • 四、使用教程
  • 五、MathML语法
    • 5.1、顶层元素
    • 5.2、字符/符号元素
    • 5.3、通用布局元素
    • 5.4、边标和角标元素
    • 5.5、表格教学
    • 5.6、数学符号
  • 六、转换工具
    • 6.1、手写转换公式工具myscript
    • 6.2、截图转换公式工具Mathpix

一、前言

目前项目中需要显示数学公式,本来打算采用markdown,但是试了多种方式都不行,然后想过Latex,后面发现MathML,效果还不错,XML格式,然后XML解析的公式可以显示在QtMmlWidget控件中,也可以导出图片,显示在QLabel上。


二、效果展示

在这里插入图片描述


三、库文件

链接:https://pan.baidu.com/s/1bF4tuUA2FCfTnzabChVqkA
提取码:d33i


四、使用教程

//创建QtMmlWidget
m_mml_widget = new QtMmlWidget;

//打开文件槽函数
void MainWindow::openFile(const QString &mml_file_name)
{
	//清除
	//------------------------------------------------
    m_mml_widget->clear();

	//读取文件
	//------------------------------------------------
    QFile file(mml_file_name);
    if (!file.open(QIODevice::ReadOnly)) {
		qDebug()<<"打开文件失败!";
		return;
    }

    QTextStream stream(&file);
	//stream.setEncoding(QTextStream::UnicodeUTF8);
    QString text = stream.readAll();
    file.close();	//关闭文件
   
   	//显示公式
   	//------------------------------------------------
    QString error_msg;
    int error_line, error_column;
    bool result = m_mml_widget->setContent(text, &error_msg, &error_line, &error_column);
    if (!result) {
    	qDebug()<<"显示公式失败: "<<"Parse error: line " + QString::number(error_line) + ", col " + QString::number(error_column) + ": " + error_msg;
		return;
    }

	//导出图片
   	//------------------------------------------------
    QPixmap pm;
    int idx = mml_file_name.lastIndexOf('.');
    if (idx != -1) {
	QString image_file_name = mml_file_name.mid(0, idx + 1) + "png";
	if (pm.load(image_file_name))
	    m_compare_image->setPixmap(pm);	//m_compare_image是一个QLabel
    }
}

五、MathML语法

5.1、顶层元素

MathML的顶级元素。类似于HTML中的<body>

<math>
	.....
</math>

5.2、字符/符号元素

1、<mi>元素

<mi>元素指示内容应该作为标识符呈现,比如函数名、变量或符号常量;
还可以在其中使用任意文本来标记属于;

<math>
  <mi> x </mi> <!-- x -->
  <mi> &pi; </mi>  <!-- π -->
</math>

在这里插入图片描述

2、<mn>元素

<mn>元素表示一个数值文字,它通常是一串数字,并带有可能的分隔符(点或逗号);
但是,它也允许在其中包含任意文本,实际上是一个数字量,例如 “11”;

<math>
  <mn> 1 </mn>
  <mn> 2e10 </mn>
</math>

在这里插入图片描述

3、<mo>元素

<mo>元素表示运算,包括括号等“运算符”、逗号和分号等分隔符;

 <math>
    <mn> 5 </mn>
    <mo> + </mo>
    <mn> 5 </mn>
  </math>

在这里插入图片描述

4、<ms>元素

<ms>元素表示要由编程语言和计算机代数系统解释的字符串文字;
默认情况下,字符串文字显示为用双引号(")括起来;
通过使用 lquote 和 rquote 属性,可以设置要显示的自定义字符;
请注意,除非引号是字符串文字的一部分,否则不应该指定引号;
<ms>元素的内容本身不是 ASCII 字符串,而是一系列字符以及<mglyph><malignmark>元素;

<math>
  <ms lquote="" rquote=""> abc </ms> <!-- „abc“ -->
</math>

5、<mspace>元素

<mspace>元素用来表示一段空白,空白的大小由它自身的属性(width,height,depth)决定;

<math>
  <!-- depth: 基线下方的空白高度 -->
  <!-- height: 基线上方的空白高度 -->
  <mspace depth="40px" height="20px" />
  <!-- width: 空白的宽度 -->
  <mspace width="100px" />
</math>

7、<mtext>元素

<mtext>元素用于呈现没有符号意义的任意文本,比如文本或注释;
要显示有符号意义的文本,可以使用<mi><mo>;

<math> 
  <mtext> Theorem of Pythagoras </mtext>  
  <mtext> /* comment here */ </mtext>
</math>

在这里插入图片描述


5.3、通用布局元素

1、<menclosed>元素

<menclosed>元素将其内容呈现在由 notation 属性指定的封闭符号中,支持 17 中不同的封闭符号;

<!-- 求阶乘 -->
<math> 
  <menclose notation="madruwb">
    <msup><mi>a</mi><mn>2</mn></msup>
    <mo>+</mo>
    <msup><mi>b</mi><mn>2</mn></msup>
  </menclose>
</math>

在这里插入图片描述

2、<merror>元素

<merror>元素用于将内容显示为错误消息;

<math>
  <merror>
    <mrow>
      <mtext>除以0:</mtext>
      <mfrac>
        <mn> 1 </mn>
        <mn> 0 </mn>
      </mfrac>
    </mrow>
  </merror>
</math>

在这里插入图片描述

3、<mfrac>元素

<mfrac>元素用于显示分数;

<math>
  <mfrac> <!-- a / b -->
    <mi> a </mi>
    <mi> b </mi>
  </mfrac>
</math>

在这里插入图片描述

4、<mphantom>元素

<mphantom>元素以不可见的方式呈现,但是尺寸(例如高度、宽度和基线位置)仍然保持不变;
类似于 CSS 中的visibility: hidden

<math>
  <mrow>
    <mi> x </mi>
    <mo> + </mo> 
    <mphantom> <!-- mphantom 标签内的元素不可见 -->
      <mi> y </mi>
      <mo> + </mo>
    </mphantom>
    <mi> z </mi>
  </mrow>
</math>

在这里插入图片描述

5、<mroot>元素

<mroot>元素用来表示一个有明确根指数的根式;
它接受两个参数,语法如下:<mroot> base index </mroot>

<math>
  <mroot>
    <mi>x</mi>
    <mn>3</mn>
   </mroot>
</math>

在这里插入图片描述

6、<mrow>元素

<mrow>元素用于对连续多行表达式的不同子表达式进行分组;
一条子表达式通常算作一行,至少包含一或多个操作符与其运算对象(比如 <mi><mn>);

<math>
  <mrow>
    <mroot>
      <mi>x</mi>
      <mn>3</mn>
     </mroot>
  </mrow>
  <mrow>
    <mroot>
      <mi>x</mi>
      <mn>3</mn>
     </mroot>
  </mrow>
  <mrow>
    <mroot>
      <mi>x</mi>
      <mn>3</mn>
     </mroot>
  </mrow>
  </math>

在这里插入图片描述

7、<msqrt>元素

<msqrt>元素用于表示一个平方根(不显示根指数);
它只接受一个参数,语法如下:<msqrt> base </msqrt>

<math>
  <msqrt>
    <mi>x</mi>
  </msqrt>
</math>

在这里插入图片描述

8、<mstyle>元素

<mstyle>元素更改其子元素的样式;

<math> 
  <mstyle displaystyle="true" mathcolor="teal">
    <mrow>
      <munderover>
        <mo stretchy="true" form="prefix">&sum;</mo>
        <mrow>
          <mi>i</mi>
          <mo form="infix">=</mo>
          <mn>1</mn>
        </mrow>
        <mi>n</mi>
      </munderover>
      <mstyle displaystyle="true">
        <mfrac>
          <mn>1</mn>          
          <mi>n</mi>
        </mfrac>
      </mstyle>
   </mrow>
  </mstyle>
</math>

在这里插入图片描述


5.4、边标和角标元素

1、<msub>元素

<msub>元素用来为表达式加下标;
语法如下:<msub> base subscript </msub>

<math>
  <msub>
    <mi>X</mi>
    <mn>1</mn>
  </msub>
</math>

在这里插入图片描述

2、<msup>元素

<msup>元素用于为表达式加上标;

<math>
  <msup>
    <mi>X</mi>
    <mn>2</mn>
  </msup> 
</math>

在这里插入图片描述

3、<msubsup>元素

<msubsup>元素用于为表达式同时附加上角标和下角标;
语法如下:<msubsup> base subscript superscript </msubsup>

<math displaystyle="true">   
  <msubsup>
    <mo> &#x222B;<!-- 积分符号 --> </mo>
    <mn> 0 </mn>
    <mn> 1 </mn>
  </msubsup>
</math>

5.5、表格教学

<mtable>,<mtr>,<mtd>元素类似于 HTML 中的<table>,<tr>,<td>

<math>
  <mtable>
    <mtr>
      <mtd><mi>A</mi></mtd>
      <mtd><mi>B</mi></mtd>
      <mtd><mi>C</mi></mtd>
    </mtr>
  </mtable>
</math>

在这里插入图片描述


5.6、数学符号

1、代数符号

在这里插入图片描述

2、微积分符号

在这里插入图片描述

3、省略符号

在这里插入图片描述

4、函数符号

在这里插入图片描述

5、几何符号

在这里插入图片描述

6、希腊字母

在这里插入图片描述
在这里插入图片描述

7、不可见运算符

在这里插入图片描述

8、逻辑符号

在这里插入图片描述

9、集合符号

在这里插入图片描述


六、转换工具

6.1、手写转换公式工具myscript

使用手写转换工具:https://webdemo.myscript.com/,可以直接手写代码,一键转换成MathML标记文本;

在这里插入图片描述
在这里插入图片描述
点击Convert

在这里插入图片描述


6.2、截图转换公式工具Mathpix

使用Mathpix: https://mathpix.com/,可以截图提取图片中的公式,并可以转换多种格式:Latex、MarkDown、MathML、SVG等;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

MySQL数据库学习——约束——概述+演示

我们先创建一个表&#xff1a; create database itheima; use itheima; create table user(id int primary key auto_increment comment 主键, name varchar(10) not null unique comment 姓名,age int check ( age > 0 && age <120 ) comment 年龄,status char…

零代码是什么?零代码平台适合谁用?

随着信息技术的发展&#xff0c;软件开发领域也不断发生变革&#xff0c;零代码&#xff08;No-Code&#xff09;开发模式越来越受到关注。 零代码到底是什么&#xff0c;能不能用通俗的话来说&#xff1f;这就来给大家讲一讲&#xff01; 01 零代码为什么出现&#xff1f; 随…

spring cloud consul服务注册源码分析

我们注册在consul上的服务&#xff0c;都是通过spring cloud consul discorvery来实现的&#xff0c;可以通过maven依赖导入spring-cloud-consul-discovery包。 对于spring项目&#xff0c;首先查看spring.factories文件&#xff1a; 从源码中可以找到服务注册、自动服务注册…

kubespray v2.21.0 部署 kubernetes v1.24.0 集群

文章目录1. 前言2. 创建7台虚拟机3. 部署 git3.1 dnf 安装3.2 tar 安装4. 下载 kubespray 介质5. 配置 zsh 终端6. 配置互信7. 安装 docker-ce8. 安装 ansible9. 安装其他依赖10. 配置内核参数11. 安装 k8s利用官方默认镜像部署 k8s 集群利用自定义构建镜像部署 k8s 集群12. 配…

第二讲 第一个Python程序

在上一课中&#xff0c;我们对 Python 语言的过去现在有了一些了解&#xff0c;我们准备好了运行 Python 程序所需要的解释器环境。相信大家已经迫不及待的想开始自己的 Python 编程之旅了&#xff0c;但是新问题来了&#xff0c;我们应该在什么地方书写 Python 程序&#xff0…

mvn测试执行用例的常用的命令

mvn执行指定的测试用例 mvn常用的命令 mvn mvn test -Dtestxxx&#xff1a;执行指定测试用例的命令&#xff0c;后面的xxx就是指定的所有被标记的用例 mvn test -Denv环境名 -Dtest包的路径.*:指定具体的某个环境的某个包下的所用例 mvn test -Dgroupsxxx -Dtestxxx :指定某…

Python实战案例:采集P站数据内容

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 开发环境&#xff1a; Python 3.8 / 编译器 Pycharm 2021.2版本 / 编辑器 模块使用&#xff1a; requests &#xff1a; 主要用来发 送 HTTP 请求 、 属于第三方模块 parsel &#xff1a; 解析html&#xff0c;xml内…

业务高峰期,人力需求突增,灵活用工成破局关键

在上一篇文章里&#xff0c;讲到了盖雅零工平台如何帮助HR管理复杂、灵活的零工人员。 而零工平台是否好用&#xff0c;不仅要便于HR管理零工&#xff0c;更需要终端的业务管理者觉得方便、实用、操作顺畅。 由于零工主要被用来解决突增的、巅峰期的、季节性的用工需求&#…

nginx实战,nginx高可用, nginx负载配置, nginx正向,反向代理,nginx各种配置, 及其配置问题

nginx配置实战, nginx负载&#xff0c; nginx正向&#xff0c;反向代理&#xff0c;nginx路由配置 nginxnginx基础nginx 配置nginx正向代理nginx 反向代理nginx 负载nginx高可用 nginx 配置常见问题反向代理报426错误post请求变get请求nginx 配置前端代理&#xff0c; 会出现js…

自学Java靠谱吗?自学Java能找到工作吗?建议收藏反复查看!

网上是不是很多人劝你学Java不要报班&#xff0c;浪费金钱&#xff0c;自己在家学习Java就可以了。那小源问你&#xff0c;自学Java它的成功率到底有多少&#xff1f;前两天看到一位老师发的视频&#xff0c;说自学的成功率大概在5%左右&#xff0c;小源觉得这个数据还是比较客…

IO线程模型

文章目录IO线程模型一、BIO1、概念2、Demo2.1、Demo1.02.2、Demo2.02.3、小结二、NIO1、概念2、Demo2.1、Demo1.02.2、Demo2.0IO线程模型 一、BIO 1、概念 BIO 全称 Block-IO 是一种**同步且阻塞**的通信模式。是一个比较传统的通信方式&#xff0c;模式简单&#xff0c;使用…

万字长文的BI百科全解

目前来看&#xff0c;现今世界未来的发展方向基本已经确定&#xff0c;数字化的趋势已经化身为一股不可阻挡的浪潮&#xff0c;各国也都宣布了数字化、数据、数字经济、数字化转型等方面的相关发展政策法规&#xff0c;明确未来的战略方针。同时世界传统经济增长也开始乏力&…

6 计时器(一)

计时器 6.1 TIM TIM简介 TIM&#xff08;Timer&#xff09;定时器 定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元&#xff0c;在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中…

2023 年 3 月 NFT 月度报告

作者&#xff1a;Danielfootprint.network 数据来源&#xff1a;NFT Monthly Report 三月份的 NFT 市场上出现了两个有趣的趋势。一方面&#xff0c;Polygon 链尽管在二月份有所突破&#xff0c;达到了 NFT 总交易量的 4.2%&#xff0c;但于三月再次跌至 1% 以下&#xff0c;…

55 openEuler搭建Mariadb数据库服务器-配置环境

文章目录 55 openEuler搭建Mariadb数据库服务器-配置环境55.1 关闭防火墙并取消开机自启动55.2 修改SELINUX为disabled55.3 创建组和用户55.4 创建数据盘55.4.1 方法一&#xff1a;在root权限下使用fdisk进行磁盘管理55.4.2 方法二&#xff1a;在root权限下使用LVM进行磁盘管理…

【C语言】基础语法1:变量和数据类型

❤️‍&#x1f525;前情提要❤️‍&#x1f525;   欢迎来到C语言基本语法教程   在本专栏结束后会将所有内容整理成思维导图&#xff08;结束换链接&#xff09;并免费提供给大家学习&#xff0c;希望大家纠错指正。本专栏将以基础出发&#xff0c;在之后的教程中将会不断…

MySQL调优笔记——慢SQL优化记录(2)

今天调优的原因是&#xff0c;有一个统计报表业务&#xff0c;查询的时间太慢&#xff1b;同时由于数据库的压力是随机性的&#xff0c;这个业务的执行下限和上限相差近20倍&#xff1b;快的时候可以达到600ms&#xff0c;慢的时候有9秒之多&#xff1b; 接下来详细介绍&#x…

STL--string

一、string介绍 string是表示字符序列的对象。 标准字符串类通过类似于标准字节容器的接口为此类对象提供支持&#xff0c;但添加了专门设计用于处理单字节字符字符串的功能。 字符串类是 basic_string 类模板的实例化&#xff0c;该模板使用char作为其字符类型&#xff0c;以…

【云原生进阶之容器】第五章容器运行时5.7--容器逃逸原理

《云原生进阶之容器》专题索引: 第一章Docker核心技术1.1节——Docker综述第一章Docker核心技术1.2节——Linux容器LXC第一章Docker核心技术1.3节——命名空间Namespace第一章Docker核心技术1.4节——chroot技术第一章Docker核心技术1.5.1节——cgroup综述

为什么要对员工行为进行安全管控?

ChatGPT的火热已不是一件新鲜事了。而现在更让大家热议的是&#xff0c;ChatGPT带来的网络安全风险&#xff0c;不少安全人员对此担心不已。因ChatGPT引起的网络安全事件&#xff0c;媒体也多有报道。 例如&#xff0c;近日&#xff0c;外媒就报道了三星因ChatGPT泄露了机密信息…