zoukankan      html  css  js  c++  java
  • 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文件夹:
      在这里插入图片描述

      可以运行,如下图:
      在这里插入图片描述

     

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

     

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

  • 相关阅读:
    Selenium3+python3自动化(二十九)--绕过验证码(add_cookie)
    Selenium3+python3自动化(二十八)--cookie相关操作
    Selenium3+python3自动化(二十七)--webdriver中等待,显式等待(WebDriverWait),强制等待sleep(),隐式等待implicitly_wait()
    Selenium3+python3自动化(二十七)--爬页面源码(page_source)
    Selenium3+python3自动化(二十六)--判断元素存在
    Selenium3+python3自动化(二十五)--获取元素属性,driver.title,driver.text,driver.tag_name,get_attribut("属性名"),输入框文本值get_attribute("value"),driver.name
    Selenium3+python3自动化(二十四)--获取百度输入联想词
    Selenium3+python3自动化(二十三)--文件上传(send_keys)
    Selenium3+python3自动化(二十二)--窗口多标签处理方法总结
    POJ
  • 原文地址:https://www.cnblogs.com/qq21497936/p/15492170.html
Copyright © 2011-2022 走看看