QT与MATLAB混合编程详解

写在前面:由于matlab和qt的环境配置复杂,请大家一定先根据自己电脑的路径来替换本文中的路径

本文使用环境:

        MATLAB 2022b

        qt 6.6

        编译环境:MSVC2019 64位

matlab的环境还需要配置在环境变量中

此电脑(右键)—>属性—>高级系统设置—>环境变量—>环境变量—>path,加入下面:

这里要填自己matlab的路径哦!应用完之后,需要重启电脑使其生效

检查matlab的环境

mbuild -setup

正常会输出以下结果,请大家选择红圈内的选项

在matlab下新建一个文件,我们写一个绘制三角函数的代码,写入以下代码:

function y = mysin( )
% 定义 x 的范围  
x = -2*pi:0.01:2*pi;  
  
% 计算 sin(x)  
y = sin(x);  
  
% 添加标题和标签  
title('sin(x) 函数');  
xlabel('x');  
ylabel('sin(x)');

% 绘制 sin(x) 函数  
plot(x, y);  

end

注意,需要写成函数形式

运行一下

在matlab的命令行下输入下面的代码

mcc -W lib:mysindll -T link:lib mysin.m -C

我们主要用的是下面的四个文件:

 

然后我们来创建qt项目

 之后的选项默认,然后我们来到选择构建套件这一步

我们选择MSVC 2019 64 

创建项目后,我们需要先运行一下、

我们需要把下面三个文件,放到项目目录下

然后把下面这个文件,放到debug目录下

然后右击头文件,添加现有文件, 选中.h文件

然后我们来修改.pro文件,在其中添加以下内容:

INCLUDEPATH +=D:\matlab\extern\include\
              D:\matlab\extern\include\win64
DEPENDPATH += D:\matlab\extern\include
LIBS += D:\matlab\extern\lib\win64\microsoft\libmx.lib\
        D:\matlab\extern\lib\win64\microsoft\mclmcr.lib\
        D:\matlab\extern\lib\win64\microsoft\mclmcrrt.lib\
        D:\matlab\extern\lib\win64\microsoft\libmat.lib\
        D:\matlab\extern\lib\win64\microsoft\libmex.lib\
        D:\matlab\extern\lib\win64\microsoft\libeng.lib\

INCLUDEPATH += $$PWD/''
DEPENDPATH += $$PWD/''

这里的路径需要改为自己matlab的路径

这里我们手动添加库,将下面红圈的内容改成自己的路径

在mainwindow.ui下添加两个按钮

 

在mainwindow.h里,声明两个函数

这是我的mainwindow.cpp,大家可以根据自己的需求修改

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <mclmcrrt.h>
#include "mysindll.h"
#include <QMessageBox>
#include <QPushButton>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->pushButton,&QPushButton::clicked,[=](){
        func1();
    });
    connect(ui->pushButton_2,&QPushButton::clicked,[=](){
        func2();
    });
}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::func1()
{
    if(mysindllInitialize())
    {
        QMessageBox::information(NULL,"ok","初始化成功");
    }else{
        QMessageBox::information(NULL,"NO","初始化失败");
    }

    mlfMysin(1,NULL);

}

void MainWindow::func2()
{
    mysindllTerminate();
}

运行结果如下:

下面对于几个可能的报错进行解释:

缺少dll文件,需要把生成的dll文件放到debug目录下

函数绘制结果不正确:需要把.ctf文件也放到项目目录下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/277001.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker 实践之旅:项目迁移与高效部署

目录 1 引言2 初识 Docker2.1 Docker简介2.2 Docker优势 3 传统部署流程的问题4 学习 Docker 的过程5 Docker 解决项目部署的实践5.1 迁移关键服务5.2 定制化打包与快速部署 6 项目实践收获6.1 简化了部署流程6.2 节约了部署成本 7 克服难点和经验分享7.1 版本兼容性问题7.2 网…

Android Studio修改创建新布局时默认根布局

将Android Studio默认布局ConstraintLayout切换成LinearLayout 打开设置&#xff0c; Editor> File and Code Templates > Other > layoutResourceFile.xml 备注&#xff1a;创建时提示根布局仍然为ConstraintLayout&#xff0c;不用管这个&#xff0c;实际创建的…

MybatisX逆向工程方法

官方文档链接&#xff1a;MybatisX快速开发插件 | MyBatis-Plus (baomidou.com) 使用MybatisX可以快速生成mapper文件&#xff0c;实体类和service及实现 效果 方法&#xff1a;首先下载mybatisX插件 然后创建数据库信息 然后选中表&#xff0c;右键&#xff0c;点击Mybatis…

WeakMap 和 Map 的区别,WeakMap 原理,为什么能被 GC?

垃圾回收机制 我们知道&#xff0c;程序运行中会有一些垃圾数据不再使用&#xff0c;需要及时释放出去&#xff0c;如果我们没有及时释放&#xff0c;这就是内存泄露 JS 中的垃圾数据都是由垃圾回收&#xff08;Garbage Collection&#xff0c;缩写为 GC&#xff09;器自动回…

JMeter逻辑控制器之While控制器

JMeter逻辑控制器之While控制器 1. 背景2.目的3. 介绍4.While示例4.1 添加While控制器4.2 While控制器面板4.3 While控制器添加请求4.3 While控制器应用场景 1. 背景 存在一些使用场景&#xff0c;比如&#xff1a;某个请求必须等待上一个请求正确响应后才能开始执行。或者&…

Springboot整合JSP-修订版本(Springboot3.1.6+IDEA2022版本)

1、问题概述&#xff1f; Springboot对Thymeleaf支持的要更好一些&#xff0c;Springboot内嵌的Tomcat默认是没有JSP引擎&#xff0c;不支持直接使用JSP模板引擎。这个时候我们需要自己配置使用。 2、Springboot整合使用JSP过程 现在很多的IDEA版本即使创建的项目类型是WAR工…

页面左中右下布局HTML

效果如下 代码如下 <!DOCTYPE html> <html><head><title>名曲欣赏</title><meta charset"UTF-8" /><style>body {padding: 0;margin: 0;background: linear-gradient(180deg, #d7f5f2 0%, #c4f2ee 100%);}p {margin: 0;p…

学生使用什么牌子的护眼灯好?五款优秀台灯分享

在近几年&#xff0c;儿童青少年近视率非常高。很多家长认为孩子近视的原因是没有养成正确的用眼习惯&#xff0c;例如经常趴桌子写作业、眯眼看书等&#xff0c;但实际上这些坏习惯是因为没有合适的光线而导致的。所以安排一盏合适的台灯给孩子学习是非常重要的。 很多家长会选…

基于C++的类Unix文件系统

这是一个基于C的类Unix文件系统&#xff0c;有意者私信获取。 可用指令如下&#xff1a; ls - 显示当前文件夹下的内容 cd - 按照路径进入到某个文件夹下 mkdir <path/name> - 在指定路径下创建一个文件夹 create <path/name> - 在指定路径下创建一个文件 open &…

Hadoop安装笔记2单机/伪分布式配置_Hadoop3.1.3——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务2:离线数据处理

紧接着上一篇博客&#xff1a;Hadoop安装笔记1&#xff1a; Hadoop安装笔记1单机/伪分布式配置_Hadoop3.1.3——备赛笔记——2024全国职业院校技能大赛“大数据应用开发”赛项——任务2&#xff1a;离线数据处理-CSDN博客https://blog.csdn.net/Zhiyilang/article/details/135…

SpringBoot 项目中常用的注解

每一层对应每个包&#xff0c;包名中应全为小写。 一、Common 层&#xff08;实体类&#xff09; 前提&#xff1a;导入 Lombok 依赖 Data&#xff1a;生成 get 和 set 方法以及 toString 方法 Getter&#xff1a;只生成 get 方法&#xff0c;避免对类中的成员变量修改。 …

《MySQL系列-InnoDB引擎01》MySQL体系结构和存储引擎

文章目录 第一章 MySQL体系结构和存储引擎1 数据库和实例2 MySQL配置文件3 MySQL数据库路径4 MySQL体系结构5 MySQL存储引擎5.1 InnoDB存储引擎5.2 MyISAM存储引擎5.3 NDB存储引擎5.4 Memory存储引擎5.5 Archive存储引擎5.6 Federated存储引擎 6 连接MySQL6.1 TCP/IP6.2 命名管…

MIT线性代数笔记-第31讲-线性变换及对应矩阵

目录 31.线性变换及对应矩阵打赏 31.线性变换及对应矩阵 线性变换相当于是矩阵的抽象表示&#xff0c;每个线性变换都对应着一个矩阵 例&#xff1a; 考虑一个变换 T T T&#xff0c;使得平面上的一个向量投影为平面上的另一个向量&#xff0c;即 T : R 2 → R 2 T:R^2 \to R…

CDN 原理

CDN 原理 CND 一般包含分发服务系统、负载均衡系统和管理系统 分发服务系统 其基本的工作单元就是各个 Cache 服务器。负责直接响应用户请求&#xff0c;将内容快速分发到用户&#xff1b;同时还负责内容更新&#xff0c;保证和源站内容的同步。 根据内容类型和服务种类的不…

gitlab请求合并分支

直接去看原文: 原文链接:Gitlab合并请求相关流程_source branch target branch-CSDN博客 --------------------------------------------------------------------------------------------------------------------------------- 入口&#xff1a; 仓库控制台的这两个地方都…

RedisConnectionFailureException: Unable to connect to Redis; 报错解决

一 Unable to connect to Redis报错提示 项目启动时都会报错&#xff1a;RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException 如图&#xff1a; 提示是不能正确连接到redis&#xff0c;连接问题的问…

关于苹果iOS 16:揭开伪装成飞机模式的隐形蜂窝接入漏洞的动态情报

一、基本内容 在日常生活中&#xff0c;网络威胁不断演变&#xff0c;给个人和组织带来了一系列重大挑战。网络犯罪分子使用的一种最常见的、最具破坏性的方法之一就是网络钓鱼。这种攻击方式通过电子邮件、短信或其他通讯渠道冒充可信实体&#xff0c;诱使个人泄露敏感信息&am…

Flink版本更新汇总(1.14-1.18)

0、汇总 1.14.0 1.有界流支持 Checkpoint&#xff1b; 2.批执行模式支持 DataStream 和 Table/SQL 混合应用&#xff1b; 3.新增 Hybrid Source 功能&#xff1b; 4.新增 缓冲区去膨胀 功能&#xff1b; 5.新增 细粒度资源管理 功能&#xff1b; 6.新增 DataStream 的 Pulsar …

特征归一化及其原理--机器学习

归一化是数据预处理中的一种常见操作&#xff0c;其目的是将不同特征的数值范围统一或缩放到相似的尺度。这有助于提高模型的性能&#xff0c;加速模型的收敛&#xff0c;并使模型更加稳健。以下是进行归一化的一些原因和原理&#xff1a; 消除特征间的尺度差异&#xff1a; 不…

计算机网络概述(上)——“计算机网络”

各位CSDN的uu们好呀&#xff0c;好久没有更新小雅兰的计算机网络的专栏啦&#xff0c;而且期末考试也要考计算机网络&#xff0c;所以&#xff0c;小雅兰就来写计算机网络的内容啦&#xff01;&#xff01;&#xff01;下面&#xff0c;让我们进入计算机网络概述的世界吧&#…