Matlab+Qt开发笔记(一):matlab搭建Qt开发matlib环境以及Demo测试

简介: Matlab+Qt开发笔记(一):matlab搭建Qt开发matlib环境以及Demo测试

前言

  做一些数据处理软件,使用matlab文件,.mat文件。


准备条件

  安装matlab2016,发现是vs 12(是vs2011版本),Qt5.9.3是支持vs 14(是vs2015版本),安装matlab2020a版本(该版本是vs 14版本的,每年matlab上半年发布a版本,下半年发布b版本)。

  安装请自行百度,下载,解压,安装都比较费时间。

  安装完后:

  


Qt的准备条件

  (Qt5.9.3+QtCreator+msvc2015)

  挑选Qt的版本,需要支持matlab2020a的lib库的版本(vs2014版本),笔者qt5.9.3,装了VS2015,在QtCreator创建Demo工程,使用vs14版本编译,构建套如下图:

  


引入mat到Qt工程汇总

引入mat头文件路径

  先用安装的matlab做测试,然后依赖的头文件抽出来模块化。

# 添加matlab头文件
#INCLUDEPATH += "C:/Program Files/Polyspace/R2020b/extern/include"
INCLUDEPATH += $$PWD/matlab2020b/include

引入mat库路径以及基础的两个库

  先用安装的matlab做测试,然后依赖的库文件抽出来模块化。

# 添加matlab库路径和库文件
#LIBS += -L"C:/Program Files/Polyspace/R2020b/extern/lib/win64/microsoft"
LIBS += -L$$PWD/matlab2020a/lib
#LIBS += -llibeng
LIBS += -llibmat
LIBS += -llibmx

最终的配置文件

INCLUDEPATH += $$PWD
DEPENDPATH += $$PWD
HEADERS += \
    $$PWD/MatlabManager.h
SOURCES += \
    $$PWD/MatlabManager.cpp
# 添加matlab头文件
#INCLUDEPATH += "C:/Program Files/Polyspace/R2020b/extern/include"
INCLUDEPATH += $$PWD/matlab2020b/include
# 添加matlab库路径和库文件
#LIBS += -L"C:/Program Files/Polyspace/R2020b/extern/lib/win64/microsoft"
LIBS += -L$$PWD/matlab2020b/lib
#LIBS += -llibeng
LIBS += -llibmat
LIBS += -llibmx


Demo

bool MatlabManager::openMatFile(QString filePath)
{
    MATFile *pMATFile = 0;
    LOG;
    QThread::sleep(5);
    pMATFile = matOpen(filePath.toUtf8().data(), "r");
    if(!pMATFile)
    {
        LOG << "Failed to matOpen:" << filePath;
        QMessageBox::information(0, 
                                 "Failed", 
                                 QString("Failed to open file:%1").arg(filePath));
        return false;
    }
    QMessageBox::information(0, 
                             "Succeed", 
                             QString("Succeed to open file:%1").arg(filePath));
}


Demo演示

  


模块化

  进一步做了模块化的封装:

  

  Mat运行环境比较麻烦,所以单独抽出来mat,运行mat需要90多MB的dll,如下图:

  


工程模板:v1.0.0

  testMatlabDemo_工程模板_v1.0.0_基础调用matlab库成功.rar


入坑

入坑一:Qt程序运行直接宕机

问题

  编译可以通过,但是QtCreator运行就挂掉。

影响问题判断因素1

  将matlab的win64加入系统环境后,按道理QtCreator运行就不会宕机,但是仍然宕机。(此处导致浪费不少时间,也试过可能加载其他库,但是没有这些情况),如下图:

  

  后编译运行成功后,回头使用系统路径还是不可以,但是补一个系统路径测试如下:

  

影响问题判断因素2

  直接运行编译后的exe,qt的windeployqt打成安装包后,会提示缺少dll,缺少一个增加一个,最后不提示,也不运行,不符合一般的qt应用常理。

原因

  因为运行时,需要加载matlab的运行环境。

解决

  将matlab/bin/win64目录的dll全部拷贝到Qt项目的release文件夹:

  

  可以运行,如下图:

  



相关文章
|
9天前
|
机器学习/深度学习 JSON 算法
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-Seg模型进行图像分割的完整流程,包括图像分割的基础知识、YOLOv5-Seg模型的特点、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。通过实例代码,指导读者从自定义数据集开始,直至模型的测试验证,适合深度学习领域的研究者和开发者参考。
45 2
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
|
9天前
|
测试技术
自动化测试项目实战笔记(三):测试用户注册(验证码错误,成功,出现弹框时处理)
本文是关于自动化测试项目实战笔记,主要介绍了如何测试用户注册功能,包括验证码错误、注册成功以及弹框处理的测试步骤和代码实现。
36 2
自动化测试项目实战笔记(三):测试用户注册(验证码错误,成功,出现弹框时处理)
|
9天前
|
Java 关系型数据库 MySQL
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
这篇文章是关于自动化测试项目实战笔记,涵盖了JDK、Tomcat、MySQL、Jpress环境的安装和搭建过程,以及测试用例和常见问题总结。
21 1
自动化测试项目实战笔记(一):JDK、Tomcat、MySQL、Jpress环境安装和搭建
|
15天前
|
安全
红队测试方法论-课程笔记
红队测试方法论-课程笔记
红队测试方法论-课程笔记
|
5天前
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
|
9天前
|
计算机视觉
目标检测笔记(二):测试YOLOv5各模块的推理速度
这篇文章是关于如何测试YOLOv5中不同模块(如SPP和SPPF)的推理速度,并通过代码示例展示了如何进行性能分析。
36 3
|
9天前
|
人工智能 算法 测试技术
自动化测试项目实战笔记(二):解决验证码识别问题
这篇文章介绍了三种自动化测试中验证码识别的方法:使用Python的pytesseract和PIL模块、利用第三方API如万维易源,以及使用开源的ddddocr库,还提到了一些注意事项,比如如何获取验证码区域的截图。
25 2
|
9天前
|
分布式计算 Hadoop 大数据
大数据体系知识学习(一):PySpark和Hadoop环境的搭建与测试
这篇文章是关于大数据体系知识学习的,主要介绍了Apache Spark的基本概念、特点、组件,以及如何安装配置Java、PySpark和Hadoop环境。文章还提供了详细的安装步骤和测试代码,帮助读者搭建和测试大数据环境。
19 1
|
9天前
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
17 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
9天前
|
机器学习/深度学习 并行计算 数据可视化
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用PaddleClas框架完成多标签分类任务,包括数据准备、环境搭建、模型训练、预测、评估等完整流程。
28 0
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)