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文件也放到项目目录下