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文件,动态显示公式,可以玩出花儿来。这些复杂的操作我就不展示了,加油。
最后愿我们共同进步! 感谢您的阅读,欢迎留言讨论、收藏、点赞、分享。