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置于你项目的根目录

Qt学习_18_用QtMmlWidget实现界面中显示公式_第1张图片

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

Qt学习_18_用QtMmlWidget实现界面中显示公式_第2张图片

Qt学习_18_用QtMmlWidget实现界面中显示公式_第3张图片

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

Qt学习_18_用QtMmlWidget实现界面中显示公式_第4张图片

QT       += xml

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

#ifndef DESIGN_H
#define DESIGN_H

#include 
#include     // 就看这句哈

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

Qt学习_18_用QtMmlWidget实现界面中显示公式_第5张图片

Qt学习_18_用QtMmlWidget实现界面中显示公式_第6张图片

Qt学习_18_用QtMmlWidget实现界面中显示公式_第7张图片

Qt学习_18_用QtMmlWidget实现界面中显示公式_第8张图片

当然你也可以不去界面去提升,搞的很复杂,你直接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、效果展示

Qt学习_18_用QtMmlWidget实现界面中显示公式_第9张图片

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

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

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

Qt学习_18_用QtMmlWidget实现界面中显示公式_第10张图片

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

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

你可能感兴趣的:(QT学习,学习,qt,QtMmlWidget,显示公式)