QT和matlab混合编程

一. 内容简介

需要用QT调用matlab代码完成计算,并获取计算结果。

二. 软件环境

2.1QT 5.14.1

新版QT6.4,,6.5在线安装经常失败,而5.9版本又无法编译64位程序,所以就采用5.14.1这个用的比较多也比较稳定的一个版本。

QT编译器采用的是MSVC2017 64bit。

链接:https://pan.baidu.com/s/1ER98DPAkTUPlIyCC6osNNQ?pwd=1234

2.2MatlabR2022b(64位)

2.3Visual studio 2017

Visual stdio采用2017主要是因为QT5.14.1最高到MSVC2017 64bit。

三.主要流程

3.1将.m文件打包成c++动态库dll

3.2QT导入lib库,设置系统环境变量,加入Matlab其他依赖库和头文件搜索路径

3.3QT调用DLL中的函数

3.4对QT编译后的exe进行打包,以及增加启动页面

四.具体步骤

4.1将.m文件打包成c++动态库dll

在matlab中编写matAdd.m。

function  [C]= matAdd(A,B)
C=A+B;
end

在命令行中输入

mbuild -setup

选择mex -setup C++ -client MBUILD

再输入

mbuild -setup C++

随后
QT和matlab混合编程_第1张图片
选择
请添加图片描述

点击打包即可

请添加图片描述

4.2QT导入lib库,设置系统环境变量,加入Matlab其他依赖库和头文件搜索路径

导入lib库

QT和matlab混合编程_第2张图片

在pro文件中,加入Matlab其他依赖库和头文件搜索路径

# .h文件搜索路径

INCLUDEPATH += D:/MATLAB/R2022b/extern/include
INCLUDEPATH += D:/MATLAB/R2022b/extern/include/Win64

# 用到的MATLAB 的.lib库文件 及其搜索路径
INCLUDEPATH += D:/MATLAB/R2022b/extern/lib/win64/microsoft
DEPENDPATH += D:/MATLAB/R2022b/extern/lib/win64/microsoft

win32: LIBS += -LD:/MATLAB/R2022b/extern/lib/win64/microsoft/ -llibmex
win32: LIBS += -LD:/MATLAB/R2022b/extern/lib/win64/microsoft/ -llibmx
win32: LIBS += -LD:/MATLAB/R2022b/extern/lib/win64/microsoft/ -llibmat
win32: LIBS += -LD:/MATLAB/R2022b/extern/lib/win64/microsoft/ -llibeng
win32: LIBS += -LD:/MATLAB/R2022b/extern/lib/win64/microsoft/ -lmclmcr
win32: LIBS += -LD:/MATLAB/R2022b/extern/lib/win64/microsoft/ -lmclmcrrt

系统环境变量的设置

D:\MATLAB\R2022b\runtime\win64;
D:\MATLAB\R2022b\bin\win64;

4.3QT调用DLL中的函数

报错的话,还要将头文件引入

    if (!matAddInitialize()) //DLL 初始化
      {
         ui->lineEdit_3->setText("DLL initialization failed");
         return;
      }
      QString result;
      double para1,para2;
      para1=ui->lineEdit->text().toDouble();
      para2=ui->lineEdit_2->text().toDouble();
      mwArray a(1,1,mxDOUBLE_CLASS);
      mwArray b(1,1,mxDOUBLE_CLASS);
      mwArray c(1,1,mxDOUBLE_CLASS);
      a(1,1)=para1;
      b(1,1)=para2;
      int nargout=1;//输出变量个数
      matAdd(nargout,c,a,b);//C=A+B
      
      result=c.ToString();
      ui->lineEdit_3->setText(result);

4.4对QT编译后的exe进行打包,以及增加启动页面

使用realease编译,将realease文件中的exe移动到新的文件夹中,随后搜索qt

QT和matlab混合编程_第3张图片

接下来cd 到我们exe所在的文件的路径中

cd /d C:\Users\Lenovo\Desktop\matlab

再输入,windeployqt 1.exe,即可完成打包。

windeployqt 1.exe

QT调用matlab,第一次运行会加载几秒钟,所以在软件启动时完成第一次加载,随后速度就正常了,可以增加一个几秒的启动页面

#include  /
#include 
#include "matAdd.h"
#include 
#include
#include
#include 
#include 

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);


    QPixmap lodingPix("Qt.png");
    QSplashScreen splash(lodingPix);
    splash.show();
    splash.showMessage("程序正在加载......", Qt::AlignTop|Qt::AlignRight, Qt::red);
    a.processEvents();
    Sleep(5000);
    Widget w;
    w.show();

    splash.finish(&w);
    return a.exec();
}

五.参考

QT和matlab混合编程实现加法运算http://t.csdn.cn/TCfz4

Qt生成的exe文件打包给其他人使用http://t.csdn.cn/7GZOC

Qt 5.9 与 Matlab 2017b 混合编程基本流程http://t.csdn.cn/QhcyO

Qt设置软件启动动画(开屏动画、欢迎界面)http://t.csdn.cn/nvw0h

你可能感兴趣的:(qt,开发语言)