前言

  做一些数据处理软件,使用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文件夹:
  

  可以运行,如下图:
  

 

上一篇:没有了
下一篇:《Matlab+Qt开发笔记(二):Qt打开mat文件显示读取的数据》敬请期待…

 

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/120979753

最新文章

  1. windows核心编程---第八章 使用内核对象进行线程同步
  2. android自定义控件(6)-详解在onMeasure()方法中如何测量一个控件尺寸
  3. POJ 1925 Spiderman
  4. Eclipse插件Target Management (RSE)
  5. dedecms 列表每隔6行输出一个空li
  6. UIStepper swift
  7. 写入数据到Plist文件中时,第一次要创建一个空的数组,否则写入文件失败
  8. 获得临时文件目录(Temp文件夹)
  9. (step8.2.4)hdu 1846(Brave Game——巴什博奕)
  10. [解读REST] 4.基于网络应用的架构风格
  11. day07 Class_field_method_反射
  12. 剑指offer(55)链表中环的入口节点
  13. 知识点:Mysql 基本用法之流程控制
  14. 使用Python学习selenium测试工具-4:查找元素
  15. angular4-注入服务
  16. appium 问题
  17. [svc]centos7的服务治理-systemd
  18. java web项目配置https访问
  19. poj3686
  20. Linq 分组(group by)后列变行

热门文章

  1. vue-router路由钩子
  2. java线程day-01
  3. Java基础系列(17)- 顺序结构
  4. django2获取url所有路径
  5. 自动化测试报告----allure2(一)
  6. python序列类型及一些操作
  7. Android12系统源码分析:NativeTombstoneManager
  8. 把之前CompletableFuture留下的坑给填上。
  9. oracle扩展表空间
  10. 6岁!是时候重新认识下Serverless了