Qt Creator与matlab混合编程

Qt Creator与matlab混合编程

引言:项目要求在Qt平台下搭建基于有限元算法的光学仿真平台,首先需要进行网格划分的实现。由于网格划分算法在matlab平台下已经有非常成熟的工程以及代码,如果可以直接调用,将大大缩短开发周期。故有了如下Qt与Matlab混合编程的例子。

参考文档:Qt与matlab混合编程

以下内容所使用的操作系统、软件以及编译器版本:win10、Qt5.14.1(msvc2017_64)、Matlab R2020a

.m文件示例

matAdd.m

function [C]= matAdd(A, B)
% 两个矩阵数相加
C = A + B;
end

Qt工程中引用Matlab相关的库和文件

.pro文件作如下设置,其中E:\software\matlab 为matlab的安装路径,可以根据自身实际安装的路径进行更改
在这里插入图片描述

通过动态库(dll)调用matlab

将.m文件编译成C++可以直接调用的动态库,之后在Qt程序中直接使用。这种方法最为简单,也最为常见。

matlab函数编译动态库

  1. matlab中打开需要编译的.m文件,命令行输入
mbuild -setup

在这里插入图片描述
确认所使用的编译器是和Qt对应的msvc2017,若不是则需要修改。
2. 对库进行打包操作
在这里插入图片描述
选择C++ Shared Library,对需要打包的代码进行添加,并命名输出的文件夹名称,点击Package。
在这里插入图片描述
生产完成后,在matlab工程下可以看到动态库
在这里插入图片描述
在这里插入图片描述

Qt调用matlab生成的动态库

将生成的文件添加进工程

.h文件放入根目录下,.lib文件放于新建的lib文件夹中,.dll文件放入工程构建后产生的debug目录下。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

Qt调用dll

方法1:Qt工程中.pro引用生成的动态库

LIBS += D:/qt_prj/occQt-master/lib

方法2:
右键工程添加外部库,选择.lib文件。注意这里只是用win版本就足够。
在这里插入图片描述
在这里插入图片描述

引用头文件

通过添加现有项,将.h文件加入工程,include到被调用的文件中。
在这里插入图片描述
必须要进行初始化操作!!
在这里插入图片描述

Qt中调用动态库的函数

    if(!matAddInitialize()) { // 初始化,必须要使用
            qDebug() << "add init failed.";
            return;
        }
        qDebug() << "susss";

        double vectA[]={1,2,3};  // 向量A
        double vectB[]={5,6,7};  // 向量B

        int rowCnt=1;   // 行数
        int colCnt=3;   // 列数
        int elementCnt=3;  // 元素个数

        mwArray matrixA(rowCnt, colCnt, mxDOUBLE_CLASS, mxREAL);  // 定义数组
        matrixA.SetData(vectA, elementCnt);  // 将C++ 的一维数组存储到MATLAB的二维数组

        mwArray matrixB(rowCnt, colCnt, mxDOUBLE_CLASS, mxREAL);
        matrixB.SetData(vectB, elementCnt);

         //计算
        mwArray matrixC(rowCnt, colCnt, mxDOUBLE_CLASS, mxREAL);  // 定义数组,double类型
        int nargout=1;  // 输出变量个数
        matAdd(nargout, matrixC, matrixA, matrixB);  // 调用函数计算,返回的结果保存在matrixC变量中
         //读取结果
        int dim = 1;  // 按照向量读出matrixC
        double a = matrixC.Get(dim, 1);
        double b = matrixC.Get(dim, 2);
        double c = matrixC.Get(dim, 3);
        //输出结果
        qDebug()<<a;
        qDebug()<<b;
        qDebug()<<c;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值