Qt之如何使用matlab库对mat文件进行读写操作

26 篇文章 3 订阅

一、简述

分享一下在Qt使用matlab库进行一些操作,至于什么是matlab,百度一下,你就知道。matlab中有很多写好的库函数可以方便使用,想使用matlab自己的数据文件.mat文件也需要引用matlab的相关库函数。

具体有两种用法:

  • 1、在matlab中写好相关函数,发布为dll供Qt使用
  • 2、直接在Qt中使用matlab库函数

两种方法都有各自优缺点,其一因为在matlab软件中直接编写,可方便看到参相关数,运行结果,还可以直接看到生成数据的相关曲线图。但是只能运行已经写好的dll,修改代码不方便。

其二在Qt中直接调用,也算是非常方便,想怎么用就直接写就行了,下面中我会分享一个利用matlab库对它的.mat数据文件进行读和写的例子,但是.mat文件呢,一般编辑器是打不开的,要想看到具体的数据,是否写的对不对啊,读取的对不对啊还是得用matlab软件打开进行查看。

大家可以针对自己的需求自行选择操作方式。今天先讲述一下在Qt中如何直接使用matlab库进行读、写的操作。


二、代码之路

  • 第一步:下载matlab软件
    可以去官网进行下载,然后进行安装,装完在网上找破解软件即可使用(或者先试用一个月)。安装完毕之后会在系统环境变量Path中添加以下路径,但是真正依赖的dll文件都在 F:\Program Files\MATLAB\R2018b\bin\win64 目录。

在这里插入图片描述


  • ** 第二步:新建工程,配置matlab环境**

注 : 以下为VS下配置的环境示例,QCreator直接在pro文件中安照下面步骤添加相关代码进行引用。

(1)、配置引用头文件目录
在这里插入图片描述
(2)、配置相关依赖库函数

配置库目录
在这里插入图片描述
配置引用的库,这里只需用到读写操作,所有只需要libmat.lib以及libmx.lib即可。
在这里插入图片描述
(3)、代码之路

保存mat文件

void TestMatlabLib::saveMatFile()
{
    double *out = new double[50];
    for (int i = 0; i < 50; i++)
    {
        // 生成随机数;
        QTime time;
        time = QTime::currentTime();
        qsrand(time.msec() * 1000);
        QThread::msleep(2);
        out[i] = qrand() % 1000;
    }

    MATFile *OutFile = NULL;
    mxArray *pMxArray = NULL;

    // 打开mat文件;
    // 如果文件不存在,则创建一个空文件;
    OutFile = matOpen(QString("data.mat").toLatin1(), "w");
    // 创建 5*10 的矩阵数据;(mat文件数据是 X * X 的 矩阵);
    pMxArray = mxCreateDoubleMatrix(5, 10, mxREAL);
    // 数据内存拷贝;
    memcpy((void *)(mxGetPr(pMxArray)), (void *)out, sizeof(double) * 50);
    // 将矩阵数据存入到mat文件中;
    matPutVariable(OutFile, "var", pMxArray);
    // 关闭文件;
    matClose(OutFile);
}

// 写数据到mat文件

 // 打开mat文件;
    MATFile *pmatFile = matOpen(QString("data.mat").toLatin1(), "r");
    if (pmatFile == NULL)
    {
        return;
    }

    // 获取文件中变量var;
    mxArray* Array1 = matGetVariable(pmatFile, "var");
    matClose(pmatFile);

    // 获取矩阵数据行数;
    int row = mxGetM(Array1);
    // 获取矩阵数据列数;
    int column = mxGetN(Array1);
    // 获取数据;
    double *Data = (double*)mxGetData(Array1);

    for (int i = 0; i < row * column; i++)
    {
        qDebug() << Data[i];
    }

保存文件,我们可以用matlab软件打开,以下是调用saveMatFile函数生成的mat文件。
注意:mat文件中的数据存储是一列一列存储的。
在这里插入图片描述


以上讲述了Qt中使用matlab库读取/存储 .mat文件。
有人可能会问,matlab这么大,可不可以不安装啊,可以,需要两步,一是把需要的头文件和lib文件放到自己的工程目录下, 然后引用该工程下的相关文件,第二把相关dll拷贝到生成的exe同级目录即可。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值