需要用QT调用matlab代码完成计算,并获取计算结果。
新版QT6.4,,6.5在线安装经常失败,而5.9版本又无法编译64位程序,所以就采用5.14.1这个用的比较多也比较稳定的一个版本。
QT编译器采用的是MSVC2017 64bit。
链接:https://pan.baidu.com/s/1ER98DPAkTUPlIyCC6osNNQ?pwd=1234
Visual stdio采用2017主要是因为QT5.14.1最高到MSVC2017 64bit。
在matlab中编写matAdd.m。
function [C]= matAdd(A,B)
C=A+B;
end
在命令行中输入
mbuild -setup
选择mex -setup C++ -client MBUILD
再输入
mbuild -setup C++
点击打包即可
导入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/microsoft
win32: 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;
报错的话,还要将头文件引入
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+B
result=c.ToString();
ui->lineEdit_3->setText(result);
使用realease编译,将realease文件中的exe移动到新的文件夹中,随后搜索qt
接下来cd 到我们exe所在的文件的路径中
cd /d C:\Users\Lenovo\Desktop\matlab
再输入,windeployqt 1.exe,即可完成打包。
windeployqt 1.exe
QT调用matlab,第一次运行会加载几秒钟,所以在软件启动时完成第一次加载,随后速度就正常了,可以增加一个几秒的启动页面
#include /
#include
#include "matAdd.h"
#include
#include
#include
#include
#include
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();
}