1. 程式人生 > >QTcreator&Matlab混合程式設計

QTcreator&Matlab混合程式設計

Matlab&Qtcreator混合程式設計總結

因為專案的需要這兩日一直在摸索matlab與qtcreator混合程式設計的東西,期間遇到過很多的問題,在此進行一個總結,希望能夠幫到後面有需要的人。

  1. 環境:Windows10 64位、Qtcreator5.7 32位、Matlab2014b 32位(注意:這裡在使用Qtcreator和Matlab是要求使用相同位數的版本,我之前用的是64位的Matlab2010b和32位的Qtcreator結果一直都出錯,提示我需要引用的.DLL(動態連結)檔案中的函式無定義);
  2. 工具安裝:Qtcreator的安裝我就不多說了這個很簡單,關於Matlab2014b的安裝需要說明一下,首先給大家提供兩個擁有龐大資源的兩個微信公眾號(不是打廣告),裡面有很多的平時學習及開發所使用到的工具,而且更好的是還有相應的版本的安裝教程,第一個: “哏兒都校園
    ”;第二個:“軟體安裝管家”;我使用的23位Matlab2014b的資源就是從第一個微信公眾號中獲取的,但是在使用該公眾號提供的安裝指南出現了一些問題,現在就將這些問題一次羅列出來:

(1)在使用管理官身份開啟“setup應用程式”時出現了一個錯誤:大概意思是“在D:\Matlab2014b\bin..\..\..檔案中的msvcr110.dll檔案沒有被指定在Windows執行或者包含錯誤,請……”

對於這個問題我在網上查找了很久都沒有能夠解決,就在快要放棄這個版本去下另外一個的時候我試了一下把提示在該資料夾下的該檔案剪切出來在去執行“setup應用程式”,竟然剛剛的問題解決了,哈哈哈…太巧了,好吧,這個問題就這樣解決了,至於具體的什麼原理啊,我還真不清楚,反正及這樣稀裡糊塗的解決了。

(2)在後續安裝的時候按照指南選擇我已有我的許可證的檔案安裝祕鑰,輸入20個1“11111111111111111111”,在點選下一步的時候先該祕鑰無效,竟然會無效?什麼鬼?我又去核對了一下我輸入的

1的個數是否是20個,確認無誤,當時心裡很煩躁,又不能用,我立馬想起還有其他版本的Matlab的安裝指南,我便去了“軟體安裝管家”微信公眾號的Matlab2015b的安裝指南,令人興奮的是它的祕鑰不是20個1,而是:09806-07443-53955-64350-21751-41297,我便複製貼上上去了,點選下一步,OK沒有問題,就這樣等到後面安裝成功了,沒有出現其他的問題了,最後配置一下Matlab和Qt的環境,這樣工具就準備好了,接下來就正是開始混合程式設計。

3、        混合程式設計:

           (1)建立.m檔案,寫function

            function y = myFunc( )

% a test for qt and matlab mixed program

% Detailed explanation goes here

x = 0:0.01:25;

y = -x.^2 + 4 * x + 450;

plot(x, y, 'LineWidth', 2);

end

           執行的結果如下圖:

(2)設定編譯環境:使用mex –setup然後選擇:mex -setup C++;將執行位置更換到該m檔案所在的檔案,再使用命令mcc -W lib:libmyFunc -T link:lib myFunc.m,稍微等一會兒便會生成如下圖所示的一些檔案:

(注:可以使用DependencyWalker來檢視.dll檔案中的一些內容,在這一步可能有些人還會編譯器無法設定的問題,這裡我就不提了,大家可以去參考其他的部落格進行解決,有很多的解答)

(3)使用Qtcreator建立工程,我建立時選擇了Application然後使用了QT Widgets Application,後面再命名該工程(我的命名Test)。

在介面上新增一個Push Button按鈕,並在標頭檔案中新增一個QLibrary 的變數m_lib(後面要用);.pro檔案中新增:

INCLUDEPATH += D:/Matlab2014b/extern/include

INCLUDEPATH += D:/Matlab2014b/extern/include/win32

LIBS+=-LD:/Matlab2014b/extern/lib/win32/microsoft-llibmx

DEFINES += __MW_STDINT_H__

(這個要根據自己的Matlab具體的安裝位置來修改。)將之前Matlab生成的檔案.h和.lib拷貝到Qt工程中,將.dll拷貝到debug資料夾中,再在.pro檔案中單擊右鍵選擇新增庫->外部庫->選擇.lib檔案新增,在工程中的標頭檔案中新增.h檔案;然後再之前新增的Push Button按鈕轉到槽函式中進行程式碼編寫,下面貼出我的程式碼:

 

(網上可以找到相關的程式碼,我也是複用的。)

然後構建專案執行,如果沒有什麼問題應該是這樣的結果:

期間參考了一些部落格: