QT和matlab混合编程以及maltab程序化初始化失败

article/2025/8/19 18:06:16

一. 内容简介

需要用QT调用matlab代码完成计算,并获取计算结果。

二. 软件环境

2.1QT 5.14.1

新版QT6.4,,6.5在线安装经常失败,而5.9版本又无法编译64位程序,所以就采用5.14.1这个用的比较多也比较稳定的一个版本。

QT编译器采用的是MSVC2017 64bit。

链接:https://pan.baidu.com/s/1ER98DPAkTUPlIyCC6osNNQ?pwd=1234

2.2MatlabR2022b(64位)

2.3Visual studio 2017

Visual stdio采用2017主要是因为QT5.14.1最高到MSVC2017 64bit。

三.主要流程

3.1将.m文件打包成c++动态库dll

3.2QT导入lib库,设置系统环境变量,加入Matlab其他依赖库和头文件搜索路径

3.3QT调用DLL中的函数

3.4对QT编译后的exe进行打包,以及增加启动页面

四.具体步骤

4.1将.m文件打包成c++动态库dll

在matlab中编写matAdd.m。

function  [C]= matAdd(A,B)
C=A+B;
end

在命令行中输入

mbuild -setup

选择mex -setup C++ -client MBUILD

再输入

mbuild -setup C++

随后
请添加图片描述
选择
请添加图片描述

点击打包即可

请添加图片描述

4.2QT导入lib库,设置系统环境变量,加入Matlab其他依赖库和头文件搜索路径

导入lib库

请添加图片描述

在pro文件中,加入Matlab其他依赖库和头文件搜索路径

# .h文件搜索路径INCLUDEPATH += D:/MATLAB/R2022b/extern/include
INCLUDEPATH += D:/MATLAB/R2022b/extern/include/Win64# 用到的MATLAB 的.lib库文件 及其搜索路径
INCLUDEPATH += D:/MATLAB/R2022b/extern/lib/win64/microsoft
DEPENDPATH += D:/MATLAB/R2022b/extern/lib/win64/microsoftwin32: LIBS += -LD:/MATLAB/R2022b/extern/lib/win64/microsoft/ -llibmex
win32: LIBS += -LD:/MATLAB/R2022b/extern/lib/win64/microsoft/ -llibmx
win32: LIBS += -LD:/MATLAB/R2022b/extern/lib/win64/microsoft/ -llibmat
win32: LIBS += -LD:/MATLAB/R2022b/extern/lib/win64/microsoft/ -llibeng
win32: LIBS += -LD:/MATLAB/R2022b/extern/lib/win64/microsoft/ -lmclmcr
win32: LIBS += -LD:/MATLAB/R2022b/extern/lib/win64/microsoft/ -lmclmcrrt

系统环境变量的设置

D:\MATLAB\R2022b\runtime\win64;
D:\MATLAB\R2022b\bin\win64;

4.3QT调用DLL中的函数

一般我都把这个初始化放在main.cpp中,做一个启动页面,然后把这个matlab初始化放在启动页面中(可以看下我的启动页面的文章https://blog.csdn.net/qq_45179361/article/details/128984660),直接用的话加载会卡几秒(视电脑性能而定),把初始化和计算分离最好了。
下面说问题,就是这个初始化会失败,为什么失败我也不确定,我确定不了之前我有没有配环境,但是之前一直能用的,后来换了一个程序就一直初始化失败,第一步先检查代码,代码没问题后,第二步就安装环境,调用新的程序都需要安装的(不同程序的环境不一样,不通用)。
然后第一步就安装环境(复杂一些的就需要了,别的电脑用的话也需要),安装完了在调用,这样保险一些,具体不装能不能用我也不清楚,没测试了,但是好几次都是装完就好了

if (!matAddInitialize()) //DLL 初始化
{ui->lineEdit_3->setText("DLL initialization failed");return;
}

环境安装,就前面编译完事后生成的三个文件夹
在这里插入图片描述
第二个是咋们用的库了什么的,第一个是这个matlab程序执行需要的环境,这个要安装的

安装好了,就可以发现初始化成功了,我之前一直怀疑是代码的问题,
上边的是后来又补的,下边是原来的

如果matAddInitialize标红的话,还要将头文件引入,下边的代码是写在.cpp文件中的。

    if (!matAddInitialize()) //DLL 初始化{ui->lineEdit_3->setText("DLL initialization failed");return;}QString result;double para1,para2;para1=ui->lineEdit->text().toDouble();para2=ui->lineEdit_2->text().toDouble();mwArray a(1,1,mxDOUBLE_CLASS);mwArray b(1,1,mxDOUBLE_CLASS);mwArray c(1,1,mxDOUBLE_CLASS);a(1,1)=para1;b(1,1)=para2;int nargout=1;//输出变量个数matAdd(nargout,c,a,b);//C=A+Bresult=c.ToString();ui->lineEdit_3->setText(result);

copy别人的,当注释用

double   vectA[]={1,2,3}; //向量Adouble   vectB[]={5,6,7};  //向量Bint   rowCnt=1;   //行数int   colCnt=3;   //列数int   elementCnt=3; //元素个数mwArray matrixA(rowCnt,colCnt,mxDOUBLE_CLASS, mxREAL);//定义数组matrixA.SetData(vectA,elementCnt); //将C++ 的一维数组存储到 MATLAB的二维数组mwArray matrixB(rowCnt,colCnt,mxDOUBLE_CLASS, mxREAL);//定义数组matrixB.SetData(vectB,elementCnt); ////计算mwArray matrixp(73,73,mxDOUBLE_CLASS, mxREAL);//定义数组,double类型mwArray matrixh(73,73,mxDOUBLE_CLASS, mxREAL);//定义数组,double类型int nargout=2;//输出变量个数matAdd(nargout,matrixp,matrixh,matrixA,matrixB);//C=A+B//读取结果int dim=2; //按照二维数组读出matrixC

4.4对QT编译后的exe进行打包,以及增加启动页面

使用realease编译,将realease文件中的exe移动到新的文件夹中,随后搜索qt

请添加图片描述

接下来cd 到我们exe所在的文件的路径中

cd /d C:\Users\Lenovo\Desktop\matlab

再输入,windeployqt 1.exe,即可完成打包。

windeployqt 1.exe

QT调用matlab,第一次运行会加载几秒钟,所以在软件启动时完成第一次加载,随后速度就正常了,可以增加一个几秒的启动页面

#include <QDateTime> /
#include <QWidget>
#include "matAdd.h"
#include <QApplication>
#include<QPixmap>
#include<QSplashScreen>
#include <windows.h>
#include <QtTest/QTest>int main(int argc, char *argv[])
{QApplication a(argc, argv);QPixmap lodingPix("Qt.png");QSplashScreen splash(lodingPix);splash.show();splash.showMessage("程序正在加载......", Qt::AlignTop|Qt::AlignRight, Qt::red);a.processEvents();Sleep(5000);Widget w;w.show();splash.finish(&w);return a.exec();
}

五.参考

QT和matlab混合编程实现加法运算http://t.csdn.cn/TCfz4

Qt生成的exe文件打包给其他人使用http://t.csdn.cn/7GZOC

Qt 5.9 与 Matlab 2017b 混合编程基本流程http://t.csdn.cn/QhcyO

Qt设置软件启动动画(开屏动画、欢迎界面)http://t.csdn.cn/nvw0h


http://chatgpt.dhexx.cn/article/XoT9lEwX.shtml

相关文章

Matlab R2018a初始化问题

前几天装的MATLAB2018&#xff08;我装在C盘&#xff0c;用的是在线安装&#xff0c;自己下的License破解了&#xff09;&#xff0c;但是初始化问题一直没解决&#xff0c;下面显示我遇到的问题&#xff1a; 等4-5分钟才就绪&#xff0c;真的很浪费时间&#xff0c;然后百度别…

Matlab一直初始化进不去程序之一种解决办法

很多解决办法不行的时候你可以试试在设置里把区域改成中国 究其原因可能是因为破解版的是中国的&#xff0c;然后在联网使用matlab时IP认证不通过

matlab初始化界面卡住,Matlab初始化initializing极慢解决方法

Matlab初始化initializing极慢解决方法 Matlab升级以后&#xff0c;功能的确丰富了好多&#xff0c;有些函数也更加人性话了&#xff0c;好多bug也没有了。但是可恼的是&#xff0c;这个该死的家伙却一天比一天肥&#xff0c;MATLAB7.6a居然达到了3.76G&#xff0c;启动和打开…

12306购票辅助工具

前段时间在GitHub上看到一段刷票的脚步代码&#xff0c;下下来稍稍改了下加了个简陋的UI界面&#xff0c;另外把车站列表等信息弄成了csv文件&#xff0c;方便不改源码的情况下添加车站。 先上核心内容&#xff1a; try:if hasattr(print_func, __call__):print_func(开始刷票…

全网首发:12306抢票算法大曝光?(十张图搞定)

前言 相信大家都有过抢票、刷票的经验&#xff0c;每年年底&#xff0c;这都是一场盛宴。 然而&#xff0c;你有没有想过12306的抢票算法是怎么实现的呢&#xff1f; 没有吧&#xff0c;想过&#xff0c;还是没有头绪&#xff1f; 今天&#xff0c;我们就来曝光让人又爱又恨…

12306自动刷票下单-查票下单

前言 上篇写了12306登录&#xff0c;隔了快一个月了&#xff0c;才准备动手写下单篇&#xff0c;真的要非常感谢博客园的 Asimple朋友&#xff0c;如果不是看到你的留言&#xff0c;我几乎都忘了要写下篇了&#xff0c;这一点在简书上就不好&#xff0c;都没人看/(ㄒoㄒ)/~~&a…

python+selenium实现12306自动登录刷票抢票(自己做黄牛?!)

上一篇写了12306的自动登录破解验证图https://blog.csdn.net/weixin_38283159/article/details/86498159 这篇算是它的后续部分加上了简单的刷票和预订功能&#xff0c;毕竟登录一下没什么实际价值嘛 博主曾被黄牛挣过一百大洋至今还耿耿于怀&#xff0c;不清楚他们到达是如何抢…

转载--12306刷票记

转载自&#xff1a;http://www.360doc.com/content/13/0122/17/453497_261790962.shtml 我也记不清啥时候动了写bot刷票这个念头的。原因很简单&#xff0c;我一直认为作为一个以代码谋生的不合格程序员&#xff0c;只有把生产工具用好&#xff0c;才能增加自己存在的价值。 首…

12306自动刷票下单-查票下单(二)

前言 上篇写了12306登录&#xff0c;隔了快一个月了&#xff0c;才准备动手写下单篇&#xff0c;真的要非常感谢博客园的 Asimple朋友&#xff0c;如果不是看到你的留言&#xff0c;我几乎都忘了要写下篇了&#xff0c;这一点在简书上就不好&#xff0c;都没人看/(ㄒoㄒ)/~~&a…

快过年了,Python实现12306查票以及自动购票....

马上就要过年了&#xff0c;听说还有人买不到票&#xff1f; 不要慌&#xff0c;今天咱们来用Python做一个自动查票抢票的脚本&#xff0c;24小时抢票&#xff0c;谁抢的过你&#xff01; python实现12306自动抢票查票 准备工作爬虫思路 准备工作 环境 Python 3.8Pycharm 插…

12306智能刷票,订票

乐在分享 python版本支持 2.7.10 - 2.7.15 依赖库 依赖若快 若快注册地址&#xff1a;http://www.ruokuai.com/client/index?6726 推荐用若快&#xff0c;打码兔平台已经关闭项目依赖包 requirements.txt安装方法 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r…

12306自动刷票下单-下单

12306自动刷票下单-登录 12306自动刷票下单-查票预定 下单 进入下单界面了 https://kyfw.12306.cn/otn/confirmPassenger/initDc 还有一个请求https://kyfw.12306.cn/otn/confirmPassenger/getPassengerDTOs 仔细看一下返回值&#xff0c;是我们常用联系人的信息&…

12306自动刷票下单-下单(三)

12306自动刷票下单-登录篇&#xff08;一&#xff09;12306自动刷票下单-查票预定&#xff08;二&#xff09; 下单 进入下单界面了 https://kyfw.12306.cn/otn/confirmPassenger/initDc 还有一个请求https://kyfw.12306.cn/otn/confirmPassenger/getPassengerDTOs 仔细看一下…

新手写的一个12306刷票工具

本来是去年打算写的一个12306的刷票工具&#xff0c;但是一直拖着没完成。过完年才搞好。其实也不算写好&#xff0c;只是感觉都过完年了这个东西都没多大意义&#xff0c;在说各大网站上都有这个功能。但就当记录一下吧。 刚开始写的时候困扰我的其实不是买票的流程&#xff0…

【使用教程】面向回家编程-12306智能刷票,订票

代码链接&#xff1a;https://github.com/testerSunshine/12306 实名感谢&#xff1a;testerSunshine 春运一票难求&#xff0c;很多朋友都听说了GitHub上的12306抢票神器&#xff0c;但苦于没有计算机编程基础或在使用过程中遇到暂时无法解决的问题导致抢票失败。特撰写本博…

12306自动刷票下单-登录篇(一)

12306网站推出图片验证码以后&#xff0c;对于抢票软件就提出了更高的要求&#xff0c;本篇并不涉及自动识别验证码登录&#xff08;主要是博主能力所限&#xff09;&#xff0c;提供一个途径-打码平台&#xff0c;这个几乎是可以破解所有验证码了&#xff0c;本篇主要是分享一…

12306刷票脚本

我也在刷票&#xff0c;不过发现12306还是发生了一些变化&#xff0c;在使用过程中&#xff0c;发现会自动退出登录。所以对脚本做了一些改动。顺便加了一些新的功能。具体如下&#xff1a; 防自动退出 添加刷到票后发起桌面通知 勾选某些类型的车 选择发站站点 …

c#模拟网页实现12306登陆、自动刷票、自动抢票完全篇

这一篇文章&#xff0c;我将从头到尾教大家使用c#模拟网页面登陆12306网站&#xff0c;自动刷票&#xff0c;选择订票人&#xff0c;到最后一步提交订单。研究过HTTP协议的童鞋们都知道&#xff0c;我们在访问网站时&#xff0c;是有两种方式的&#xff0c;POST和GET方式&#…

你距离家只差一个刷票脚本而已——12306刷票脚本升级版

马上就要回家了&#xff0c;票还没有。你是否用到了我去年发布的刷票脚本呢。传送门~ 我也在刷票&#xff0c;不过发现12306还是发生了一些变化&#xff0c;在使用过程中&#xff0c;发现会自动退出登录。所以对脚本做了一些改动。顺便加了一些新的功能。具体如下&#xff1a;…

搞技术的要不要学习财务知识

越是大型的集团或者企业&#xff0c;公司里面设立的部门就越多&#xff0c;也越细化&#xff0c;各部门之间既相互独立管理&#xff0c;又是相互的辅助支持&#xff0c;所以在工作中经常遇到这样的一个问题&#xff0c;就是做技术的要不要学习财务知识。这个问题其实就是把技术…