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

发布时间:2024年01月04日

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文件,动态显示公式,可以玩出花儿来。这些复杂的操作我就不展示了,加油。

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

文章来源:https://blog.csdn.net/heqiunong/article/details/135385799
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。