matlab中vspan,搭建VS2017_QT_MATLAB开发环境

微信公众号: MitchHong

微信号: ASparkleSubscription

作者: Mitch Hong

Contents

零. 前言一. VS2017-Qt5.11.1环境的搭建1.下载源码2.安装VS20173.安装Python3.64.编译源码了5.安装成功后的环境变量的配置6.解决方案与项目文档架构设计7.编写Qt项目的 .pro文件8.使用qmake把Qt的项目文件(.pro文件)转化为VS2017的工程项目文件9.VS编译QT后,界面中的中文乱码问题二. QT项目文件中添加MATLAB环境在matlab中编译我们想调用的.m函数文件在Qt的项目环境中添加`INCLUDEPATH` 和`LIBS`三. 生成的应用程序在没有MATLAB的电脑上运行先在自己电脑上打包如何在没有MATLAB的电脑上运行其他打包方式补充:怎么手动在VS中添加MATLAB环境参考过的博客

零. 前言

上学期整了好久没成功,前几天由于一些其他问题,我重装了下系统,然后试了下新方法,就成功了。于是爆肝整理了一下,也方便我以后自己忘了再回头复习下。

虽然整个过程花了不少时间,但是毕竟磨刀不误砍柴工嘛,这配置好后,我能省掉很多工作量,比如matlab中那些信号处理相关的函数,我就不用在在C++中重写了。

一. VS2017-Qt5.11.1环境的搭建

Qt官网中只有32位(x86)的安装程序,而现在一般MATLAB都是64位的,所以如果我们想搭建Qt--MATLAB的环境就必须用64位的Qt库,那么我们只能编译器源码来实现。

1.下载源码

下面是Qt源码下载的网址(其他版本也行,我的是5.11.1),点击它,然后进入single,下载圈住的那个,zip文件:

http://download.qt.io/archive/qt/5.12/5.12.0/

3f56ffca9e477522db991eb042421f4d.png

e4b3261a025696a448ae75b635d55fd3.png

解压缩后,把这些源码拷贝到你中意的目录中,但是要保证如下的目录结构:

9eabd4360f78a37a36d40eb39caa4ed5.png

即:你拷贝到的目录/Qt/5.11.1/qtbase

2.安装VS2017

这个你直接去官网下载就行,有免费的,不过我这有个企业版的,链接如下:

链接: https://pan.baidu.com/s/12CkUbiq1i1qo2cmYErr1rw 提取码: e3rn

下载好后进行安装,勾选下面4项,如果用不到Linux的话,那个Linux的可不勾

e3a38c229e21edc4b64e6895ac3a868a.png

739b3fd043be45aba349d9e3bdad2554.png

确保以下两个目录中有nmake存在:

...\Microsoft Visual Studio 14.0\VC\bin\nmake.exe

...\Microsoft Visual Studio 14.0\VC\bin\amd64\nmake.exe

其他的版本的VS我不确定nmake在那个文件夹下,反正bin下要有,bin的amd64下也要有。

进入下面的文件夹中:

...\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\vcprojectitems

注意啊,这个Microsoft Visual Studio后面没有14.0,是另一个文件夹

cbd8bf5e122ad0802c78a2a8407d5d71.png

用记事本分别打开这两个文件,然后另存为utf-8的编码格式。

6498f3009c849dd88ca5865d4ddc8beb.png

如果版本不同,放在不同的目录中的话,可以去下载一个叫Everything的软件,然后去搜索这写文件,嘿嘿。

3.安装Python3.6

安装Python3.6并添加到Path环境变量中,这部分略

4.编译源码了

如果上面的VS2017安装正确的话,应该会有下图中红框的那个,以管理员身份运行

ebf89bf30767d9599c9ba6c2ec894822.png

然后使用

cd命令切换到与

qtbase同级的目录中:

db2d1e304fc0754f0aea38c11abad5c6.png

dir命令是用来查看当前文件夹下的所有文件,qtbase就在其中

现在,在命令行中输入:

configure -confirm-license -debug-and-release -prefix c:/qt/5.11.1/ -opensource -platform

win32-msvc -nomake tests -nomake examples -skip qtactiveqt -skip qtandroidextras -skip

qtconnectivity -skip qtdeclarative -skip qtenginio -skip qtmacextras -skip qtserialport -skip

qtsensors -skip qtscript -skip qtwebchannel -skip qtwebengine -opengl desktop

-prefix指定安装路径,-nomake表示不编译它后面的,-skip表示跳过它后面的,跳过的那些都会在和qtbase同级的目录下找到,但是不编译的就没有。最后要在后面加上 -opengl desktop,因为很可能会用到。其他的不用管,照着敲上去就行

接下来,在命令行中输入:

nmake

然后就开始编译了,我电脑性能还不错,都编译了一个多小时好像,反正等了挺久的,(如果编译出错了,我不管啊,如果和我一样应该是不会错的,这东西挺麻烦的)

如果没有出错,就在命令行中输入:

nmake install

这样就进入安装了,安装过程也要等一会,如果一切正常,就成功了。如果编译出错,需要重新配置,可以运行

cd 你的安装目录/Qt/5.11.1

nmake distclean

然后再重新执行前面的操作(从configure开始)。

5.安装成功后的环境变量的配置

先设置环境变量,在环境变量中添加下面两个

QTDIR=C:\qt\5.11.1\

QMAKESPEC=win32-msvc

4d5fdd75c1ab2fc679dc637b6e9e67e6.png

QTDIR是你的安装目录,即bin所在的目录

在PATH变量中增加如下内容

%QTDIR%\bin;

%QTDIR%\lib;

c0d6a3f8d53a6fc4978ccb35dc85e7ad.png

现在就完事了,接下来编写Qt的项目文件

6.解决方案与项目文档架构设计

首先自己建一个解决方案文件夹,再在解决方案文件夹下建立Qt项目文件夹,Common文件夹,Depends文件夹,Document文件夹,Installer文件夹:

3215a650a22b250cb3641b4253ac592b.png

Common文件夹用于存放项目依赖的静态库

Depends文件夹用于存放项目发布安装包时需要的各类dll文件

Doucment文件夹用于存放项目相关的说明文档

Installer文件夹用于存放项目安装包发布目录

Common文件夹中需要创建要创建一个Output文件夹作为项目的输出目录,在Output文件夹中还要创建一个TempFile文件夹作为项目输出的中间目录。Solution(Qt项目文件夹中的这个输出目录可在 .pro文件中直接指定)

Solution项目文件夹中要自己创建include, source, 等文件夹来分别存放头文件,源文件等其他文件

2f775319c09088b26f93a5bc603b9ffa.png

其他的都是项目自动生成的,不用手动创建。

我们可以先在include和source中新建若干个可能会用的.h或.cpp文件,新建文本文件就行,然后改一下拓展名,这样是方便在Qt的项目文件中添加,这样在VS的goon工程中就会自动创建头文件和源文件这两个文件过滤器,并把他们添加进去,这样就不用在VS中手动创建文件过滤器了。

7.编写Qt项目的 .pro文件

QT += widgets gui core charts #添加Qt库

#TARGET = Ex9_3 #生成的可执行程序的名字

TEMPLATE = app  #说明我们要生成的是一个可执行程序

INCLUDEPATH += "include/" # 添加包含路径,因为在源文件中要包含include中的头文件,所以加上这个

# 添加源文件(带路径,可以是相对路径)

SOURCES += source/datatablewidget.cpp\

source/datavisualtabwidget.cpp\

source/main.cpp\

source/mainwindow.cpp\

source/setUpMainConnections.cpp\

source/toolbar.cpp

# 添加头文件(带路径,可以是相对路径)

HEADERS += include/datatablewidget.h \

include/datavisual_tabwidget.h\

include/mainwindow.h\

include/toolbar.h

DESTDIR = bin     # 生成的可执行文件所在的目录

OBJECT_DIR = obj  # 对象文件所在的目录

MOC_DIR = moc     # moc文件所在的目录

# 同时生成debug和release两个版本

debug_and_release {

CONFIG(debug, debug|release) {

TARGET = Ex9_3_d

}

CONFIG(release, debug|release) {

TARGET = Ex9_3

}

}

更具体的 .pro配置中的参数说明见这篇博文:

https://blog.csdn.net/liang19890820/article/details/51774724

8.使用qmake把Qt的项目文件(.pro文件)转化为VS2017的工程项目文件

在那个VS的本机工具命令行中输入:

qmake -tp -vc

不过,这需要你先利用cd切换到你Qt的项目文件中去,再qmake。

这之后就会在你的项目文件中出现 xxxxxx.vcxproj文件,这是VS的项目文件,现在,你再在那个本机工具命令行中输入:

devenv xxxxxx.vcxproj

然后就会自动打开VS2017了,进入之后你再点击右上角的×,关闭VS,这时,它会提示保存 xxxxxxx.sln 这是VS的解决方案文件,你修改一下它的保存位置为解决方案文件夹(项目文件夹的父目录),而不是默认的项目文件夹。其实这个.sln放在项目文件夹中也行,看习惯把,不扯这个了,爱放哪放哪。

当我们添加新的带Q_OBJECT的文件后,需要重新qmake一下,然后devenv, 关闭,重新保存一下sln。但是这样可能需要重新配置项目的属性,不过好在不是很麻烦。

因为不qmake的话VS它自己是不会帮我们把带Q_OBJECT的头文件进行moc的,这样运行就会出错(无法解析的外部符号),只有用qmake它才会自动帮我们moc。因为这个moc文件是需要和我们的源文件一块编译的,所以必须要有。

其实这不qmake也行,只不过就要我们手动去moc,用cd切换到qttools/bin文件夹下,moc.exe就再其中,然后输入:

moc .../.../xxxx.h -o .../.../moc_xxxx.cpp

注意moc文件的格式:moc_原文件名.cpp

然后在VS中的项目中的GeneratedFiles上右键,把这个生成的moc文件添加进去。可见如果不用qmake的话,当你每次改动带Q_OBJECT的头文件文件都需要重新手动地去moc一下,也挺烦人的。

9.VS编译QT后,界面中的中文乱码问题

在所有的头文件中的#pragma once下面加上如下一行:

#pragma execution_character_set("utf-8")

c3a918502463bc1c761f2607cc047cca.png

如此就能解决中文乱码的问题了

二. QT项目文件中添加MATLAB环境

其实吧,你可以在VS的项目属性中手动添加,不过,前面不是说了嘛,你要是在VS中手动添加的话,你每次qmake后在VS中手动添加的那些都会消失,因此你就需要再在VS中重新手动添加,挺烦人的。

在matlab中编译我们想调用的.m函数文件

函数如下:

function  [C]= matAdd(n,B)

A = ones(n);

C = conv2(A,B);

mesh(C);

end

然后再MATLAB的命令行中输入:

mcc -W cpplib:matAdd -T link:lib matAdd.m

在生成的那一堆文件中选择下面三个文件(.h, .lib, .dll)

3fb816083730ee4ebbb88fc524f065dc.png

其中.dll文件要拷贝到你生成的.exe文件所在的目录中。那个.h和 .lib文件随你放哪,不过建议放在Common文件夹中,或者单独建立一个MATLAB的文件夹放进去。

在Qt的项目环境中添加`INCLUDEPATH` 和`LIBS`

# 采用绝对或者相对路径

INCLUDEPATH += "include/" \

"..\\Common\\mat_add\\include" \

"C:\\Program Files\\Polyspace\\R2019a\\extern\\include" \

"C:\\Program Files\\Polyspace\\R2019a\\extern\\include\\win64"

LIBS += "C:\\Program Files\\Polyspace\\R2019a\\extern\\lib\\win64\\microsoft\\libmex.lib" \

"C:\\Program Files\\Polyspace\\R2019a\\extern\\lib\\win64\\microsoft\\libmx.lib" \

"C:\\Program Files\\Polyspace\\R2019a\\extern\\lib\\win64\\microsoft\\libmat.lib" \

"C:\\Program Files\\Polyspace\\R2019a\\extern\\lib\\win64\\microsoft\\libeng.lib" \

"C:\\Program Files\\Polyspace\\R2019a\\extern\\lib\\win64\\microsoft\\mclmcr.lib" \

"C:\\Program Files\\Polyspace\\R2019a\\extern\\lib\\win64\\microsoft\\mclmcrrt.lib" \

"..\\Common\\mat_add\\Output\\matAdd.lib"

上面的INCLUDEPATH中第一个是我这个Qt项目本身的头文件的路径,第二个是你在matlab中编译生成的头文件,第三第四个是你matlab安装目录下extern下的那两个包含文件夹。

上面LIBS中的前6个是你Matlab安装目录下的extern下的lib目录后面的lib文件,第7个是你自己在matlab中编译出的lib文件。这个LIBS要指定具体的依赖库,而不是依赖库所在的路径

matlab的安装目录不同,但是安装路径后面的那些绝对都是相同的。

接下来,你就可以在VS中用混合编程的语法等来调用你用MATLAB生成的lib文件了。和C++混合编程的语法,这里就不说了。

最后的编译运行结果如下:

71d571b0bfeaefba486657d3bd60f496.png

7da16ea18faf030e38a3b642e2aff3c3.png

哈哈,开心!

三. 生成的应用程序在没有MATLAB的电脑上运行

先在自己电脑上打包

先用Qt自带的 windeployp.exe抽取这个exe文件所需的一些库

windeployp.exe这个文件在…/qttools/bin目录下

使用cd 在那个本机工具提示符中切换到windeployp.exe所在的目录中

使用下面的方法,来抽取

windeployqt.exe D:\PersonalAllAboutStudy\Programming\AllAboutQt\QtEx\build\debug\Ex5_1.exe

就是windeployqt.exe 后面跟上你的可执行程序的路径,就会把所有需要的抽取到这里,如下:

7246f46b9b7994cc0a97501e8d64417f.png

04fd5fef4b536c3d30c60728eb68e7f4.png

93df297a0f95606b43ccb0a725403449.png

不要忘了,如果有调用了MATLAB,要把你在matlab中编译的那个 .dll文件拷贝到这里来

如何在没有MATLAB的电脑上运行

开发带有MATLAB组件的软件时,MCRinstaller是个必备组件,目标计算机上必须要安装这个组件软件才可以正常运行。所以必须要到mathworks的官网中下载对应的runtime安装到没有matlab的电脑上才行,链接如下:

https://ww2.mathworks.cn/products/compiler/matlab-runtime.html

一定要下载与你打包的电脑上相同的runtime版本才行,不然可能会出问题,反正起码版本不能低于你的版本。安装时会自动添加到路径,如果你的电脑上有MCRinstaller.exe的话直接拷贝过去更保险点。

其他打包方式

参考下这篇博文把:

https://blog.csdn.net/lhl1124281072/article/details/80046527

补充:怎么手动在VS中添加MATLAB环境

当不需要qt时,只要在VS中用matlab,可以看看这个:

在你的项目上右键选择属性,点击VC++目录

49f9b4269f012ef1e0aa5c9bf6ddbf24.png

在包含目录中添加:

你的matlab安装路径\R2018b\extern\include

你的matlab安装路径\R2018b\extern\include\win64

在库目录中添加:

你的matlab安装路径\R2018b\extern\lib\win64\microsoft

添加好后及时点击应用!!!然后点击 链接器,选择第一个附加依赖项

6d3f4b796ca576aec2adfefbdeb72ac8.png

在其中添加下面七个 .lib,其中最后一个是你自己在matlab中生成的 .lib文件

libmex.lib

libmx.lib

libmat.lib

libeng.lib

mclmcr.lib

mclmcrrt.lib

matAdd.lib

参考过的博客

[0] 

[1] 

[2] 

[3] 

[4] 

[5] 

[6] 51cto上的,白振勇老师讲的*Qt Charts入门*这门课程的部分笔记

7916f1b44bec02d5edbb3301cf7849c2.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值