文章目录

  • 一、前言
  • 二、效果展示
  • 三、库文件
  • 四、使用

一、前言

目前项目中需要显示数学公式,本来打算采用markdown,但是试了多种方式都不行,然后想过Latex,后面发现MathML,效果还不错,XML格式,然后XML解析的公式可以显示在QtMmlWidget控件中,也可以导出图片,显示在QLabel上。


二、效果展示

Qt显示数学公式_XML


三、库文件

链接:https://pan.baidu.com/s/1bF4tuUA2FCfTnzabChVqkA 提取码:d33i


四、使用

//创建QtMmlWidget
m_mml_widget = new QtMmlWidget;

//打开文件槽函数
void MainWindow::openFile(const QString &mml_file_name)
{
	//清除
	//------------------------------------------------
    m_mml_widget->clear();

	//读取文件
	//------------------------------------------------
    QFile file(mml_file_name);
    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;
    bool result = m_mml_widget->setContent(text, &error_msg, &error_line, &error_column);
    if (!result) {
    	qDebug()<<"显示公式失败: "<<"Parse error: line " + QString::number(error_line) + ", col " + QString::number(error_column) + ": " + error_msg;
		return;
    }

	//导出图片
   	//------------------------------------------------
    QPixmap pm;
    int idx = mml_file_name.lastIndexOf('.');
    if (idx != -1) {
	QString image_file_name = mml_file_name.mid(0, idx + 1) + "png";
	if (pm.load(image_file_name))
	    m_compare_image->setPixmap(pm);	//m_compare_image是一个QLabel
    }
}