Matlab+Qt開發筆記(一):matlab搭建Qt開發matlib環境以及Demo測試

語言: CN / TW / HK

前言

做一些資料處理軟體,使用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
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