QT Creator使用matlab库文件读取.mat文件数据

一、环境配置

右击电脑属性点开高级系统设置
第一步先点开我的电脑属性,然后进入如上界面,之后点开高级系统设置,之后点开环境变量
在这里插入图片描述
在之后点开Path
在这里插入图片描述
找到matlab安装目录下面的这几个文件添加进去
在这里插入图片描述再之后配置QT,在pro文件后面添加如下几行代码

INCLUDEPATH += D:\MATLAB\matlab\extern\include\
LIBS += -LD:\MATLAB\matlab\extern\lib\win64\microsoft\ -llibeng
LIBS += -LD:\MATLAB\matlab\extern\lib\win64\microsoft\ -llibmx
LIBS += -LD:\MATLAB\matlab\extern\lib\win64\microsoft\ -llibmat

然后在需要使用的头文件部分添加如下的头文件

 #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”);

  // 获取文件中变量var;
mxArray* Array1 = matGetVariable(pmatFile, "RBR");  //先与变量绑定
mxArray* pF = mxGetField(Array1,0,"data");          //再获取其中域的数据
matClose(pmatFile);
// 获取矩阵数据行数;
int row = mxGetM(pF);
qDebug() << row<<endl;
// 获取矩阵数据列数;
int column = mxGetN(pF);
qDebug() << column <<endl;

这里要对变量跟域有个概念
比如我这个数据里面只有一个变量,那么我首先与变量绑定
mxArray* Array1 = matGetVariable(pmatFile, “RBR”);
在这里插入图片描述我这个变量打开又有这么多域,那么我想要data这个域里面的数据,通过这个函数,再绑定这个变量里面的域的数据
mxArray* pF = mxGetField(Array1,0,“data”); //再获取其中域的数据
在这里插入图片描述之后就可以通过这个函数获取其中域中的数据。

 // 获取数据;
double *Data = (double*)mxGetData(pF);

之后最主要是通过下面的一个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:关于假设数据类型介绍

NameValue
A4x5 double
B2x4x3 double
C1x1 struct

A代表是一个4x5的矩阵
B代表是一个2x4x3的矩阵
C代表是一个结构体
里面有域与值

Fieldvalue
A_fileld400x50 double
B_fileld200x50 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 ”);

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值