13-Qt5数学三维绘图
1. 第三方库:mathgl
本期视频主要介绍使用mathgl
库进行数学函数绘制,主要是三维函数绘图,网上还有关于QPlotQwt3D
的教程,但是这个第三方库太旧已经很久没有更新了,使用时有很多问题,最终选择了mathgl
。
-
下载地址:http://mathgl.sourceforge.net/doc_en/Download.html
Windows系统环境使用的话直接下载
LGPL
版本调用动态库即可(支持Qt5.12.4,mingw7.3.0 64
位版本),笔者试着像GSL
,OpenCV4
那样手动编译,但是失败了,最后还是选择使用官方自己提供的动态库,如果是在Linux环境下是可以直接编译运行使用的。 -
添加
bin
目录至环境变量
2.Qt工程导入mathgl
-
复制mathgl文件夹至工程目录路径下
-
编写.pri文件:
# 宏定义项,指明采用maghtl DEFINES += MATHGL_DLL # 指明maghtl库所对应的头文件所在目录 INCLUDEPATH += $$PWD/include # 链接静态库 #CONFIG += static # 指明依赖库关系 LIBS += -L$$PWD/lib/ -lmgl-qt5 -lmgl
-
pro文件导入mathgl.pri
-
编写
mainwindow.cpp
代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QScrollArea>
#include <mgl2/qmathgl.h>
#include "mgl2/qt.h"
#include <QDebug>
#include <QLineEdit>
const char *expr; // here `expr` is a global variable
int example(mglGraph *gr)
{
gr->Rotate(20,40);
gr->SetRanges(-3,3,-3,3,-1,1);
// gr->FSurf("sin((x^2+y^2))/sqrt(x^2+y^2+1)");
// qDebug() << expr << endl;
gr->FSurf(expr);
// gr->Drop(mglPoint(0,0,3),mglPoint(0,0,-1),0.7,"b");
gr->Box();
gr->Axis();
gr->Rotate(50,60);
gr->Title("Sample Plot!","", -1); // -1 is the font size of title
return 0;
}
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QMGL = new QMathGL(ui->widget);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
QString str = ui->lineEdit->text();
QByteArray byte = str.toLocal8Bit();
expr = byte.data(); // update the variable `expr`, convert QString to const chat
// QMGL = new QMathGL(ui->widget);
QMGL->setDraw(example);
QMGL->adjust();
// QMGL->setGrid(true);
QMGL->setZoom(true);
QMGL->setRotate(true);
QMGL->update();
}
- 需要改为Release发布方式,因为调用的动态库是Release模式的,否则会报错
如果小伙伴们对文章内容有不理解的地方可以查看博主制作的相对应视频教程哦:
https://www.bilibili.com/video/av65138381