Qt中调用MatlabEngine总结

本文总结了在Qt中调用MatlabEngine的三种方法,重点讲述了使用MatlabEngine的过程。首先需要在.pro文件中配置好engine.h头文件和库文件,然后设置Matlab的运行路径作为环境变量。在QtCreator中配置完成后,即可在Qt中通过matlabengine接口执行Matlab命令。文中还提供了在mainwindow.h和mainwindow.cpp中使用MatlabEngine的示例代码,调用Matlab小程序。


Qt中调用Matlab的方法:

1.调用matlab封装成的dll

2.调用matlab生成的exe

3.使用MatlabEngine。

接下来,总结一下Qt调用MatlabEngine的过程。

Qt调用MatlabEngine本质上是在Qt中打开Matlab平台。

首先,.pro文件中配置好engine.h的头文件和 lib库文件。engine在一般在Matlab的extern文件夹中。配置如下图,注意路径中不要有空格。



接着,配置运行时dll文件,运行时需要包含matlab安装运行的文件路径,即告诉Qt,Matlab的运行路径。如:D:\Program Files\MATLAB\R2010a\bin\win32

在开发工具环境配置环境变量或直接在计算机的环境变量配置(可以运行debug)。

笔者是在QtCreator中配置,在项目-》构建设置和运行设置中配置,配置如图:



配置好后,就可以用matlabengine了。直接在Qt里往matlab写命令就可以。这方面网上有好多例子。如:

### 如何在 Qt 中使用 MATLAB Engine API 调用 Matlab 函数 #### 初始化 MATLAB 引擎 为了能够在 Qt 应用程序中调用 MATLAB 函数,首先需要初始化 MATLAB 引擎。这可以通过 `engOpen` 或者更现代的方式通过 C++ 类 `matlab::engine::startMATLAB()` 来完成。 ```cpp #include "matlab.engine/Engine.h" using namespace matlab::engine; // 启动MATLAB引擎实例 std::unique_ptr<MATLABEngine> engine = startMATLAB(); ``` 这段代码展示了如何利用 C++ 的 RAII 特性自动管理资源生命周期[^2]。 #### 执行简单命令 一旦成功启动MATLAB 引擎,就可以执行简单的字符串形式的 MATLAB 命令: ```cpp FutureResult result = engine->evalAsync(u"disp('Hello from MATLAB')"); result.wait(); // 等待直到命令被执行完毕 ``` 这里展示的是异步方式发送命令到 MATLAB 并等待其完成。 #### 数据交换 当涉及到复杂的数据结构时,比如矩阵运算,则可能需要用特定的方法来进行数据转换和传递。例如向 MATLAB 发送一个双精度浮点数数组作为输入参数,并接收另一个数组作为输出结果: ```cpp // 创建一个包含两个元素 {1.0, 2.0} 的 std::vector<double> std::vector<double> inputVector{1.0, 2.0}; // 将 C++ vector 转换为 MATLAB 数组对象 ArrayFactory 和 TypedArray<double> auto factory = std::make_shared<ArrayFactory>(); TypedArray<double> matInput = factory->createArray({inputVector.size()}, inputVector.data()); // 调用 add 函数并将输入传入其中 std::future<std::shared_ptr<matlab::data::StructArray>> futureOutput = engine->fevalAsync(u"add", 1, matInput); // 获取计算后的结果 std::shared_ptr<matlab::data::StructArray> output = futureOutput.get(); // 解析返回的结果... double sumValue; (*output)[0][u"sum"].read(sumValue); ``` 此部分说明了怎样准备输入数据并通过 `fevalAsync` 方法同步地调用了名为 “add”的 MATLAB 函数[^3]。 #### 关闭 MATLAB 引擎 最后,在不再需要 MATLAB 功能的时候应当正确关闭它以释放占用的资源: ```cpp if (p_engine_) { engClose(p_engine_); } ``` 上述操作确保了应用程序结束前清理掉了所有与 MATLAB 相关的对象[^4]。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值