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