Qt5显示数学公式

Posted

技术标签:

【中文标题】Qt5显示数学公式【英文标题】:Qt5 display mathematical formulas 【发布时间】:2020-07-10 11:34:39 【问题描述】:

有没有办法用Qt5 显示数学公式? 我需要一种方法来显示如下公式:

【问题讨论】:

你可能想看看this previous post。 【参考方案1】:

我为你找到了这段代码:

.h

#ifndef FORMULAWIDGET_H
#define FORMULAWIDGET_H

#include <QWidget>

class FormulaItem

public:
    explicit FormulaItem(QString value) : m_value(value)

    static const QString REGULAR_EXPRESSION; 
    QPoint draw(const QPoint& pos, QPainter& p) const;

private:
    QString m_value;
;

class FormulaWidget : public QWidget

    Q_OBJECT
    using BaseClass = QWidget;
public:
    explicit FormulaWidget(QWidget* parent = nullptr);

public slots:
    void setFormula(const QString& formula);

protected:
    virtual void paintEvent(QPaintEvent* event) override;

private:
    QList<FormulaItem> m_items;
;

#endif // FORMULAWIDGET_H

.cpp

#include "FormulaWidget.h"
#include <QRegularExpression>
#include <QPainter>
#include <QStyleOption>


const QString FormulaItem::REGULAR_EXPRESSION = "sqrt\\((?<value>\\d+)\\)";

QPoint FormulaItem::draw(const QPoint& pos, QPainter& p) const

    int valueWidth = p.fontMetrics().width(m_value);
    int valueHeight = p.fontMetrics().height();

    p.drawLine(pos.x(), 4 + valueHeight / 2, pos.x() + 5, 4 + valueHeight);
    p.drawLine(pos.x() + 5, 4 + valueHeight, pos.x() + 10, pos.y() + 1);
    p.drawLine(pos.x() + 10, pos.y() + 1, pos.x() + 14 + valueWidth, pos.y() + 1);

    p.drawText(QRect(pos.x() + 12, pos.y() + 4, pos.x() + 12 + valueWidth, pos.y() + 4 + valueHeight), m_value);
    return QPoint(pos.x() + valueWidth + 20, pos.y());


FormulaWidget::FormulaWidget(QWidget* parent) :
    BaseClass(parent)

    QPalette pal = palette();
    pal.setColor(QPalette::Background, Qt::white);
    setAutoFillBackground(true);
    setPalette(pal);


void FormulaWidget::setFormula(const QString& formula)

    m_items.clear();

    QRegularExpression sqrt_value(FormulaItem::REGULAR_EXPRESSION);
    QRegularExpressionMatchIterator i = sqrt_value.globalMatch(formula);

    while (i.hasNext())
    
        QRegularExpressionMatch match = i.next();
        if (match.hasMatch())
        
            m_items.append(FormulaItem(match.captured("value")));
        
    

    update();


void FormulaWidget::paintEvent(QPaintEvent* event)

    QPainter p(this);
    p.setRenderHint(QPainter::Antialiasing);
    p.setPen(Qt::black);

    QPoint formulaPos(2, 2);

    for (const FormulaItem& item : m_items)
    
        formulaPos = item.draw(formulaPos, p);
    

此处示例:https://evileg.com/en/post/339/

【讨论】:

以上是关于Qt5显示数学公式的主要内容,如果未能解决你的问题,请参考以下文章

数学公式的显示

word中数学公式显示不出来,怎么办

怎么将复杂的数学公式复制到Word中?

怎样在 Markdown 中使用数学公式

使用Typora添加数学公式

0102编程-JupyterNotebook中显示的数学公式LaTeX