[mathgl]mathgl 2.4.4 + QT5.12.4 一个简单C++数据可视化示例

2023-05-16

文章目录

  • 下载mathgl
  • 安装qt5.12.4
  • 环境配置
  • 编写样例代码
  • 运行结果

近期想要使用C++来进行数据可视化,实现和matlab的同样目标,查到了mathgl库。在b站有一位up给出了示例的完整操作。
参考: B站QT5数学三维函数绘图

下载mathgl

  • https://sourceforge.net/projects/mathgl/files/
    在sourceforge上可以选择版本,笔者选择的和视频内的一样,为最新的2.4.4
    在这里插入图片描述

安装qt5.12.4

笔者在下载该版本的之前已经安装了5.12.0版本的qt,但是流程没有跑通。所以还是和视频内的操作一致,安装qt5.12.4,安装mingw64版本的qt。具体的qt安装方法这里不详述。

环境配置

  • 配置环境变量。然后重启windows或使用cmd的方法让环境变量立即生效。
    在这里插入图片描述
  • 新建Qmainwindow项目,自定义项目名比如:MathglTest1,一路默认参数,新建项目
    在这里插入图片描述
  • 将下载的mathgl解压缩后的文件放置在qt项目目录下
    在这里插入图片描述
    进入目录,在目录下新建mathgl.pri文件键入如下内容后保存
# 宏定义项,指明采用mathgl
DEFINES += MATHGL_DLL
# 指明mathgl库所对应的头文件所在目录
INCLUDEPATH += $$PWD/include
# 链接静态库
#CONFIG += static
# 指明依赖库关系
LIBS += -L$$PWD/lib/ -lmgl-qt5 -lmgl
  • 在新建的项目内,找到MathglTest1.pro文件,在DEFINES这一行的下面添加代码
include($$PWD/mathgl-2.4.4/mathgl.pri)

在这里插入图片描述
将项目设置为release,编译一次
在这里插入图片描述

  • 在ui设计界面,添加widget,包括一个widget控件,一个lineedit控件和一个pushbutton控件。
    在这里插入图片描述
    编译并运行一次,看看能否运行,看到界面

编写样例代码

项目结构
在这里插入图片描述
mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "mgl2/qmathgl.h"
#include "mgl2/qt.h"

namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
private slots:
    void on_pushButton_clicked();
private:
    Ui::MainWindow *ui;
    QMathGL *qgr;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

const char *expr; //global variable
int example(mglGraph *gr)
{
    gr->Rotate(20,40);
    gr->SetRanges(-3,3,-3,3,-1,1);
    gr->FSurf(expr);
    gr->Box();
    gr->Colorbar();
    gr->Grid();
    gr->Axis();
    gr->Rotate(50,60);   
    gr->Title("Example Figure","",-1.5);
    return 0;
}

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    qgr = 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();       // 转换QString 至 const char
        qgr->setDraw(example);   // 设置绘图,传入函数作为参数
        qgr->adjust();           // 自适应绘图
        qgr->setZoom(true);      //
        qgr->setRotate(true);    //设置可旋转
        qgr->update();           //更新绘图
}

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}

运行结果

build后运行,运行结果相当于matlab内的surf函数。
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[mathgl]mathgl 2.4.4 + QT5.12.4 一个简单C++数据可视化示例 的相关文章

  • 项目错误:QT 中的未知模块:webkitwidgets [重复]

    这个问题在这里已经有答案了 我正在尝试使用 MXE 在来自本教程 https stackoverflow com questions 14170590 building qt 5 on linux for windows 14170591
  • QML:原始模型中的动态视图重新排序

    使用此 Qt 教程通过拖动视图项来实现 QML 动态视图排序 QML 动态视图排序教程 https doc qt io qt 5 qml dynamicview tutorial html 原始底层模型是QAbstractListModel
  • 如何正确配置QDockWidget使其显示/隐藏?

    我是 Qt GUI 的新手 最初想配置一个 Qt Dock 小部件 该小部件在按下某个键 假设为 A 时显示 并在按下另一个键 假设为 B 时隐藏 但经过一番研究 我没有找到任何相关的解决方案 我尝试创建一个切换按钮 第一次按下时将显示停靠
  • 本机 KDE 查找 Qt 5 应用程序

    我在 Kubuntu 12 10 Linux 机器上安装了 Qt5 和 Qt4 并注意到以下内容 使用 Qt4 编译的程序具有原生 KDE 外观和感觉 我使用默认的 KDEOxygen主题 我的程序也是如此 注意带有标题的平滑渐变和聚焦小部
  • 如何在 QtQuick Controls 2 中将对话框置于屏幕中央?

    我的所有对话框都出现在屏幕的左上角而不是中心 让对话框自动正确放置的最佳方法是什么 import QtQuick 2 7 import QtQuick Controls 2 2 ApplicationWindow id mainWindow
  • 如何向 QFileSystemModel 添加自定义角色

    我想向 QFileSystemModel 添加自定义角色 可能是派生模型 我想使用此角色来保存复选框的选中状态 该状态显示在自定义委托中的文件名旁边 如何才能做到这一点 我已经使用过使用示例Qt Quick Controls 文件系统浏览器
  • 悬停时突出显示自定义 QWidgetAction

    我的应用程序有一个QMenuBar与一些QMenus 其中每个都有多个QActions 和子QMenus 大部分的QAction 项目是衍生品QWidgetAction并重新实施QWidgetAction createWidget方法 通常
  • 如何在QML中设置弹出菜单位置

    我想修复 QML 中弹出菜单的位置 当我单击设置按钮时 我希望弹出菜单将显示在固定位置 我用了一天的时间就做到了 但是做不到 我怎样才能在 QML 中做到这一点 另外 我想更改菜单项的大小 宽度和高度 希望您的帮助 这取决于QtQuick
  • Qt5 链接器错误:找不到版本“Qt_5”

    1 问题 我正在尝试构建开源motorcar https github com evil0sheep motorcar在 Arch Linux 机器上从头开始项目 Motorcar 是一款 Linux VR 窗口管理器 可与 Oculus
  • QT 5.6 QWebEngine不保存cookie

    我正在创建名为 webengine 的简单 QT 应用程序 pWebView new QWebEngineView this pWebView gt load QUrl http technoz ru pWebView gt show On
  • Qt3D 是 Qt5 的一部分吗?

    我在windows中安装了Qt5库 但Qt助手中没有关于Qt3D的文档 Qt3D 是 Qt5 的一部分还是已从发布版本 5 中删除 是的 Qt 3D 成为标准 Qt 库Qt 5 7 发布 http blog qt io blog 2016
  • Qt 的 sysroot 和前缀选项的实际示例是什么

    我正在查看可以运行的所有选项configureQt 提供的脚本 特别是 qt everywhere opensource src 5 2 0 经过大量搜索后 我确定这些东西充其量记录很少 所以我希望我能得到一些帮助 当我查看描述时prefi
  • Qt 的最佳实践包括和预编译头文件?

    当使用现代和最新的 C 编译器 例如 MSVC2015 并激活预编译头时 当前关于包含 Qt 头文件的 最佳实践 是什么 Example include
  • 当 QML 对象不可见时防止 QML 属性绑定?

    我正在开发一个具有大量属性绑定的 QML 应用程序 数百个对象被跟踪并以不同的形式显示 例如 Qt3D QCanvas 当我在应用程序的单独页面上时 x y 位置和相对大小的属性绑定仍在发生 我怎样才能阻止他们 我知道我可以根据属性是否可视
  • 如何在 C++ 运行时更改 QML 对象的属性?

    我想在运行时更改 QML 对象的文本 我尝试如下 但文本仍然为空 这是后端类 class BackEnd public QObject Q OBJECT Q PROPERTY QString userFieldText READ userF
  • 使用 Visual Studio 2013 构建 Qt 5.2.1 的静态版本

    几天来我一直在尝试使用 Visual Studio 2013 构建 Qt 的静态版本 我就是不明白我做错了什么 System Windows 7 64 位 Visual Studio 2013 仍安装 Visual Studio 2012
  • Qt 布局,在小部件大小更改后调整到最小大小

    基本上我有一个QGridLayout里面有一些小部件 最重要的是 2 个标签 我用它们将图像绘制到屏幕上 好吧 如果用户愿意 他可以更改传入图像的分辨率 从而强制标签调整大小 我们假设标签的初始大小是320x240 用户将 VideoMod
  • Pyqt5 中的 QThreads:这是官方 QThread 文档的正确 C++ 到 Python 翻译吗?

    关于如何实例化和使用的官方文档QThread可以在这里找到 http doc qt io qt 5 qthread html http doc qt io qt 5 qthread html 该文档描述了两种基本方法 1 工作对象方法和 2
  • Qt 5.3 无法使 QCompass (QSensor) 在 Windows 8.1 上工作

    我无法让传感器在我的 Asus Transformer T100 上工作 磁力计和指南针无法启动 并且我从加速度计获得假值 始终 x 0 y 9 8 z 0 即使使用我的笔记本电脑 我总是得到相同的结果 第一段文字编辑 Initialisa
  • QWinTaskbarProgress 不会显示

    我使用的是windows7和Qt5 3 0 我在 MainWindow 的构造函数中添加了以下内容 但任务栏上没有显示任何内容 我错过了什么 QWinTaskbarProgress pTaskbarProgress new QWinTask

随机推荐