前言

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

Matlab+Qt开发笔记(一):matlab搭建Qt开发matlib环境以及Demo测试的更多相关文章

  1. Bytom Dapp 开发笔记(二):开发流程

    简介 这章的内容详细分析一下涉及智能合约Dapp的整个开发流程,注意是涉及只能合约,如果你只要一些基本转BTM功能没有太大意义,本内容补充一下官方提供的 比原链DAPP开发流程,详细实践过好踩到的一些 ...

  2. Android学习笔记01-Mac下搭建Java开发环境

    一 安装JDK 下载 mac 下专用的jdk1.7, 下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downlo ...

  3. [APP] Android 开发笔记 001-环境搭建与命令行创建项目

    1. 安装JDK,SDK JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html Android SDK http ...

  4. Modbus库开发笔记:Modbus ASCII Master开发

    这一节我们来封装Modbus ASCII Master应用,Modbus ASCII主站的开发与RTU主站的开发是一致的.同样的我们也不是做具体的应用,而是实现ASCII主站的基本功能.我们将ASCI ...

  5. Modbus库开发笔记:Modbus ASCII Slave开发

    与Modbus RTU在串行链路上分为Slave和Master一样,Modbus ASCII也分为Slave和Master,这一节我们就来开发Slave.对于Modbus ASCII从站来说,需要实现 ...

  6. [Openwrt 项目开发笔记]:Openwrt平台搭建(一)补遗

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 昨晚上熬夜写了[Openwrt项目开发笔记]:O ...

  7. firefox 扩展开发笔记(三):高级ui交互编程

    firefox 扩展开发笔记(三):高级ui交互编程 前言 前两篇链接 1:firefox 扩展开发笔记(一):jpm 使用实践以及调试 2:firefox 扩展开发笔记(二):进阶开发之移动设备模拟 ...

  8. Eclipse+ADT+Android SDK 搭建安卓开发环境

    Eclipse+ADT+Android SDK 搭建安卓开发环境   要求 必备知识 windows 7 基本操作. 运行环境 windows 7(64位); eclipse-jee-luna-SR2 ...

  9. 如何在Windows上搭建Android开发环境

    Android开发越来越火,许多小伙伴们纷纷学习Android开发,学习Android开发首要任务是搭建Android开发环境,由于大家 主要实在Windows 上开发Android,下面就详细给大家 ...

随机推荐

  1. 并发编程之:ForkJoin

    大家好,我是小黑,一个在互联网苟且偷生的农民工. 在JDK1.7中引入了一种新的Fork/Join线程池,它可以将一个大的任务拆分成多个小的任务并行执行并汇总执行结果. Fork/Join采用的是分而 ...

  2. 深入xLua实现原理之Lua如何调用C#

    xLua是腾讯的一个开源项目,为Unity. .Net. Mono等C#环境增加Lua脚本编程的能力.本文主要是探讨xLua下Lua调用C#的实现原理. Lua与C#数据通信机制 无论是Lua调用C# ...

  3. Java比较两个浮点数

    浮点数的基本数据类型不能用==比较,包装数据类型不能用 equals 比较 浮点数的表示 在计算机系统中,浮点数采用 符号+阶码+尾数 进行表示.在Java中,单精度浮点数float类型占32位,它的 ...

  4. Python爬无止境,获得王者荣耀全部高清皮肤

    作为一名热爱王者两年的程序员,早就想爬取所有英雄皮肤的高清照片,在设个幻灯片放映,真香,这次只用16行代码就能实现,对于新手拿这个作为实战练手项目既简单又容易上手,快来尝试下. 百度"王者荣 ...

  5. 修改 CubeMX 生成的 RT-Thread makefile 工程

    修改 CubeMX 生成的 RT-Thread makefile 工程 使用 RT-Thread 官方 基于 CubeMX 移植 RT-Thread Nano 生成的 Makefile 工程在编译时有 ...

  6. 【PHP数据结构】顺序表(数组)的相关逻辑操作

    在定义好了物理结构,也就是存储结构之后,我们就需要对这个存储结构进行一系列的逻辑操作.在这里,我们就从顺序表入手,因为这个结构非常简单,就是我们最常用的数组.那么针对数组,我们通常都会有哪些操作呢? ...

  7. PHPDebug互动扩展【phpdbg】功能浅析

    对于 PHP 开发者来说,单步的断点 Debug 调试并不是我们的必修课,而 Java . C# . C++ 这些静态语言则会经常性地进行这种调试.其实,我们 PHP 也是支持这类调试方式的,特别是对 ...

  8. PHP方法的返回值

    不仅是PHP,大部分编程语言的函数或者叫方法,都可以用return来定义方法的返回值.从函数这个叫法来看,本身它就是一个计算操作,因此,计算总会有个结果,如果你在方法体中处理了结果,比如进行了持久化保 ...

  9. 『GoLang』语法基础

    标识符 字母或下划线开头 之后只能出现数字.字母.下划线 大小写敏感 Go语言关键字 break default func interface select case defer go map str ...

  10. python-requests包请求响应时间

    p.p1 { margin: 0; font: 14px "Helvetica Neue"; color: rgba(17, 17, 17, 1) } p.p2 { margin: ...