QT Creator使用matlab库文件读取.mat文件数据
QT Creator使用matlab庫文件讀取.mat文件數據
- 一、環境配置
- 二、關于編程介紹
- 三、關于使用函數的介紹
- 1:關于假設數據類型介紹
- 2:關于使用函數介紹
一、環境配置
第一步先點開我的電腦屬性,然后進入如上界面,之后點開高級系統設置,之后點開環境變量
在之后點開Path
找到matlab安裝目錄下面的這幾個文件添加進去
再之后配置QT,在pro文件后面添加如下幾行代碼
然后在需要使用的頭文件部分添加如下的頭文件
#include< stdio.h> #include< stdlib.h> #include"mat.h"#include"matrix.h"這里有幾個需要一定要注意的,首先第一個這個
我在網上看到按照這樣的添加lib文件,但是我沒成功
還有如下的這樣把-llibXXX放在開頭,這樣的我也試過我沒有成功
還有最重要要的是這個三個lib庫加入的順序不能錯了,一定要按照我的先-llibeng,之后再-llibmx,最后在-llibmat這樣子,不然之后寫程序時候,會有些函數無法使用,雖然沒找到原因,暫時先這樣解決了問題,如果有人知道原因歡迎交流下。
二、關于編程介紹
//打開選擇文件對話框,獲取文件路徑 QString File_Path = QFileDialog::getOpenFileName(this, "open","../","source(*.cpp *.h *.DAT *.mat);;Text(*.txt);;all(*.*)"); QByteArray ba = File_Path.toLatin1(); const char *rootFile = ba.data(); MATFile *pmatFile = matOpen(rootFile, "r"); if (pmatFile == NULL){QMessageBox::warning(NULL,tr("文件打開失敗"),tr("mat文件打開失敗"),QMessageBox::Yes);return;}這里我是先打開選擇文件的對話框,然后找到需要讀取的文件路徑,轉化為函數需要的數據格式,通過下面函數把這個mat文件打開。
matOpen(rootFile, “r”);
這里要對變量跟域有個概念
比如我這個數據里面只有一個變量,那么我首先與變量綁定
mxArray* Array1 = matGetVariable(pmatFile, “RBR”);
我這個變量打開又有這么多域,那么我想要data這個域里面的數據,通過這個函數,再綁定這個變量里面的域的數據
mxArray* pF = mxGetField(Array1,0,“data”); //再獲取其中域的數據
之后就可以通過這個函數獲取其中域中的數據。
之后最主要是通過下面的一個for循環把數據取出來
for(int i=3*row;i<4*row;i++) //獲取第四列的所有數據 {depth.append(Data[i]); //添加數據 } qDebug() <<"深度數據添加完畢"<<endl; for(int i=9*row;i<10*row;i++) {c_speed.append(Data[i]); //添加聲速數據 }qDebug() <<"聲速數據添加完畢"<<endl;三、關于使用函數的介紹
1:關于假設數據類型介紹
| A | 4x5 double |
| B | 2x4x3 double |
| C | 1x1 struct |
A代表是一個4x5的矩陣
B代表是一個2x4x3的矩陣
C代表是一個結構體
里面有域與值
| A_fileld | 400x50 double |
| B_fileld | 200x50 double |
域A_fileld是一個400x50的一個矩陣
域B_fileld是一個200x50的一個矩陣
2:關于使用函數介紹
a. matOpen:打開.mat文件。如果想打開文件“data.mat”,則MATFile pMF = matOpen(“data.mat”,”r”);
b. matClose:關閉*.mat文件。如果想關閉文件“data.mat”,則matClose(pMF);
c. matGetVariable:獲取變量,對應于表1中的“Name”。如果想獲取變量“A”,則mxArray* pA = matGetVariable(pMF,”A”);
d. matGetPr:獲取變量的實部數據。如果想獲取變量“A”的實部,則double* pAReal = mxGetPr(pA);
e. mxGetNumberOfDimensions:返回變量的維度。如果想獲取變量“A的維度,則int D = mxGetNumberOfDimensions(pA)
f. mxGetM:獲取變量的行數。如果想獲取變量“mat3D”的行數,則 int M = mxGetM(pA);此時M = 2;對于變量“mat2D”,M = 4
g. mxGetN:獲取變量在mxArray中的列數。
h. mxGetField:獲取結構體中的域,對應于表2中的“Field”。假設pS已經指向變量“C”,如果想獲取域“A_fileld ”,則mxArray* pF = mxGetField(pS,0,”A_fileld ”);
總結
以上是生活随笔為你收集整理的QT Creator使用matlab库文件读取.mat文件数据的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QT中使用QSettings保存应用程序
- 下一篇: QT如何实现对于字符串数学公式计算