Qt学习_18_用QtMmlWidget实现界面中显示公式

QtMmlWidget是一个Qt类,可用于呈现用MathML 2.0编写的数学公式。

 参考页:QtMmlWidget Class Reference (huihoo.com)

一般MathML 2.0编写的数学公式都保存于一个单独的.xml文件当中,然后QtMmlWidget类去读取这个.xml的内容,就可以显示公式了。

1、首先需要下一个库文件

qt显示数学公式的函数库资源-CSDN文库

2、将库文件解压并将里面的.h和.cpp置于你项目的根目录

3、Qt creater中左键项目文件夹,添加现有文件...

4、非常关键的一步 .pro项目配置文件中添加这么一行

QT       += xml

 5、.h文件中引用头文件

#ifndef DESIGN_H
#define DESIGN_H#include <QWidget>
#include <qtmmlwidget.h>    // 就看这句哈namespace Ui {
class design;
}class design : public QWidget
{Q_OBJECTpublic:explicit design(QWidget *parent = nullptr);~design();private:Ui::design *ui;
};#endif // DESIGN_H

 6、ui界面拉一个Widget容器,然后提升为QtMmlWidget

当然你也可以不去界面去提升,搞的很复杂,你直接new一个QtMmlWidget也是可以的。 

7、 .cpp文件中编写代码,让test.xml的公式,显示出来

 注意:"test.xml"我也放在第一步下载的压缩包了。 在测试的时候,拷贝到项目文件夹中即可,具体放在什么路径,要根据你Qt项目的编译生成的exe的路径。一般是放在.exe文件的上一级目录里。怎么让你的代码能够得到test.xml的路径,这个问题我就不细讲了。

#include "design.h"
#include "ui_design.h"design::design(QWidget *parent) :QWidget(parent),ui(new Ui::design)
{ui->setupUi(this);// 从这里开始ui->widget->clear();    //读取文件//------------------------------------------------QFile file(".\\test.xml");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;ui->widget->setBaseFontPointSize(20);    // 设置公式基本字体大小bool result = ui->widget->setContent(text, &error_msg, &error_line);}design::~design()
{delete ui;
}

下面给出我直接new一个QtMmlWidget的代码,不用去界面操作。

#include "design.h"
#include "ui_design.h"design::design(QWidget *parent) :QWidget(parent),ui(new Ui::design)
{ui->setupUi(this);QtMmlWidget* test = new QtMmlWidget(this);    // 注意这里test->clear();//读取文件//------------------------------------------------QFile file(".\\test.xml");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;test->setBaseFontPointSize(20);test->setContent(text, &error_msg, &error_line);test->show();    // 注意这里
}design::~design()
{delete ui;
}

8、效果展示

9、关于如何将你要写的公式,转化成.xml,请参考下面两个网址

Qt显示数学公式-CSDN博客 这个网址会给你讲一些MathML的语法

math (myscript.com)  这个网址,可以鼠标手写公式,然后转化程MathML,你复制代码,拷贝到一个文本文件,保存后重命名为.xml文件即可。

诚心想弄,你就跟着这个博客一步一步弄,我个人觉得MathML的语法其实挺简单的,我只花了半小时基本上就搞懂了。 然后还能直接在Qt中用代码来生成公式对应的xml文件,动态显示公式,可以玩出花儿来。这些复杂的操作我就不展示了,加油。

最后愿我们共同进步! 感谢您的阅读,欢迎留言讨论、收藏、点赞、分享。 

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

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

相关文章

微服务注册中心之Eureka

微服务注册中心之Eureka eureka 搭建集群 版本说明 Spring Boot 2.1.7.RELEASE spring-cloud-starter-netflix-eureka-server Finchley.SR2 spring-boot-starter-security 2.1.7.RELEASE pom.xml 文件 <?xml version"1.0" encoding"UTF-8"?> &l…

Mybatis面经

Mybatis &#x1f4d1;前言 本文主要是【Mybatis】——Mybatis面经的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 &#x1f304;每…

APache 网页优化

技能目标&#xff1a; 掌握 Apache 网页压缩 掌握 Apache 网页缓存 掌握 Apache 网页防盗链 掌握 Apache 隐藏版本信息 4.1 网页压缩与缓存 在使用 Apache 作为 Web 服务器的过程中&#xff0c;只有对 Apache 服务器进行适当的优化配 置&…

1.3 金融数据可视化

跳转到根目录&#xff1a;知行合一&#xff1a;投资篇 已完成&#xff1a; 1.1 编程基础   1.1.1 投资-编程基础-numpy   1.1.2 投资-编程基础-pandas 1.2 金融数据处理 1.3 金融数据可视化 文章目录 1. 金融数据可视化1.1. matplotlib1.1.1. 沪深300走势图1.1.2. 日线均线…

robots.txt

####什么是robots.txt? ​ robots.txt是一个协议,我们可以把它理解为一个网站的"管家",它会告诉搜索引擎哪些页面可以访问,哪些页面不能访问。也可以规定哪些搜索引擎可以访问我们的网站而哪些搜索引擎不能爬取我们网站的信息等等,是网站管理者指定的"君子协议…

软件工程专业毕业设计题目怎么选?

文章目录 0 简介1 如何选题2 最新软件工程毕设选题3 最后 0 简介 学长搜集分享最新的软件工程业专业毕设选题&#xff0c;难度适中&#xff0c;适合作为毕业设计&#xff0c;大家参考。 学长整理的题目标准&#xff1a; 相对容易工作量达标题目新颖 1 如何选题 最近非常多的…

并行算法举例

谷歌的三大马车中的两辆分别是MapReduce GFS 这些我们在后边都会学到。 补充shuffle的作用 将map中的内容&#xff0c;具备相同内容的key被放到一组 问题1 矩阵乘法 第一轮j相同放在一起。 第二轮ik相同的放在一起。 问题2 求和问题 问题3 不重复元素

python包chromadb安装失败总结

1&#xff0c;背景&#xff1a; 最近在学习langchain的课程&#xff0c;里面创建自己的知识库的Retrieval模块中&#xff0c;需要用到向量数据库。 所以按照官方的教程&#xff08;vectorstores&#xff09;&#xff0c;准备使用chroma的向量数据库。图片来源 2&#xff0c;问…

关键字:instanceof关键字

在 Java 中&#xff0c;instanceof关键字用于检查一个对象是否是某个特定类或其子类的实例。它的语法如下&#xff1a; 其中&#xff0c;Object是要检查的对象&#xff0c;Class是要检查的类或接口。 instanceof关键字的返回值是一个布尔值&#xff0c;如果对象Object是类Cla…

Gin 路由注册与请求参数获取

Gin 路由注册与请求参数获取 文章目录 Gin 路由注册与请求参数获取一、Web应用开发的两种模式1.前后端不分离模式2.前后端分离模式 二、RESTful介绍三、API接口3.1 RESTful API设计指南3.2 API与用户的通信协议3.3 RestFul API接口设计规范3.3.1 api接口3.3.2 接口文档&#xf…

win2003搭建DNS服务器域名解析方法

可以搭建DNS服务器的系统有很多&#xff0c;这里以win2003举例。 要在Windows 2003上搭建DNS服务器&#xff0c;需要按照以下步骤操作&#xff1a; 一 配置DNS服务器 1、打开“控制面板”,选择“添加/删除程序”,点击“添加/删除Windows组件”。 2、在“Windows组件向导”中…

有没有可以多渠道报修的维修管理系统?

以前我们买电视、空调这些电器&#xff0c;如果出了故障&#xff0c;一般都是打电话给门店&#xff0c;然后门店就会派人来修理。有的人则会自己找维修工人来维修&#xff0c;一般也是通过电话报修。不过现在是互联网时代&#xff0c;电话报修效率低下、信息传递不畅、实时跟踪…