在qt界面中调用matlab engine并嵌入Matlab cmd Window

MATLAB R2024a 本地部署与激活全攻略:从安装到功能测试 数值计算与算法开发是科学研究和工程实践中的基础需求,其核心在于通过高效的软件工具实现复杂数学运算和模型仿真。MATLAB作为业界领先的技术计算环境,其原理在于集成了强大的矩阵运算引擎、丰富的算法库和交互式开发界面,为工程师和科研人员提供了从原型设计到系统仿真的完整解决方案。在技术价值上,它极大地降低了算法验证和数据分析的门槛,提升了研发效率。其应用场景广泛覆盖信号处理、控制系统设计、图像分析以及深度学习等领域。本文聚焦于MATLAB R2024a版本的本地部署,详细解析了包括环境准备、安装步骤、离线激活以及 阅读详情

环境:win10+QT(编译器:MSVC 2017 64-bit)+Matlab 2016a 64-bit

先上效果图:
在这里插入图片描述
在这里插入图片描述
主体思路如下(参考:https://blog.youkuaiyun.com/humanking7/article/details/86040954,做了些简化)
在这里插入图片描述

主要操作

涉及到的操作主要有:

  1. qt下启动线程操作;
  2. qt下调用matlab engine 的配置;
  3. qt嵌入外部程序的窗口;
  4. qt调用windows api;

多线程Qthread: https://blog.youkuaiyun.com/naibozhuan3744/article/details/81174681
qt下调用matlab engine的配置 http://blog.sina.com.cn/s/blog_89a45b020102vrr8.html
窗口的嵌入 https://blog.youkuaiyun.com/u013394556/article/details/78534833 https://blog.youkuaiyun.com/r5014/article/details/79286444
windows api 的调用 https://blog.youkuaiyun.com/ys_073/article/details/7770693>

代码和解释

UseMatlab.pro

#-------------------------------------------------
#
# Project created by QtCreator 2019-04-22T16:00:00
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = UseMatlab
TEMPLATE = app

# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS

# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

CONFIG += c++11

SOURCES += \
        main.cpp \
        mainwindow.cpp \
    usematlabthread.cpp

HEADERS += \
        mainwindow.h \
    usematlabthread.h

FORMS += \
        mainwindow.ui

#添加matlab类库
INCLUDEPATH +=$$quote(D:\Program Files\MATLAB\R2016a\extern\include)       #matlab的extrern路径,有空格所以要用$$quote()
LIBS +=$$quote(D:\Program Files\MATLAB\R2016a\extern\lib\win64\microsoft\libeng.lib)
LIBS +=$$quote(D:\Program Files\MATLAB\R2016a\extern\lib\win64\microsoft\libmat.lib)
LIBS +=$$quote(D:\Program Files\MATLAB\R2016a\extern\lib\win64\microsoft\libmx.lib)
LIBS +=$$quote(D:\Program Files\MATLAB\R2016a\extern\lib\win64\microsoft\libmex.lib)

#添加windows库
LIBS +=User32.LIB

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

这里要注意的是添加matlab类库和windows库

usematlabthread.h

#ifndef USEMATLABTHREAD_H
#define USEMATLABTHREAD_H

//qt开启线程相关
#include <QThread>
#include <QMutex>
#include <QDebug>

//matlab相关
#include "engine.h"
#include "mat.h"

class UseMatlabThread: public QThread
{
    Q_OBJECT  //注意,没有Q_OBJECT没办法添加 signals

public:
    explicit UseMatlabThread(QObject *parent=nullptr);

    void closeThread();

signals:
    void detach_cmd();

protected:
    virtual void run();//新线程的执行的函数

public:
    volatile bool isStop; //易失变量?,需要用volatiale声明?,可以用于控制线程的开关


};

#endif // USEMATLABTHREAD_H

usematlabthread.cpp

#include "usematlabthread.h"

UseMatlabThread::UseMatlabThread(QObject *parent):QThread (parent)
{
    isStop=false;
}

void UseMatlabThread::closeThread()
{
    isStop=true;
}

void UseMatlabThread::run()
{
    Engine *Matlab;

    //open engine
    if (!(Matlab = engOpen("\0")))
    {
        qDebug()<<"Can't start MATLAB engine";
        return ;
    }


    emit detach_cmd();

    while(1)
    {
        if(isStop)
        {
            //close engine
            engClose(Matlab);
            return;
        }
        qDebug()<<"use Matlab Engine"<<QThread::currentThreadId();
        sleep(1);
    }
}

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QWindow>
#include <Windows.h>

#include "usematlabthread.h"  //用于启动matlab engine
#include "matlabcmddlg.h"     //用于将matlab engine嵌入对话框

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:

    void openME();
    void closeME();
    //void beginME();
    void finishME();

    void detach_mcmd();

private:
    Ui::MainWindow *ui;

    UseMatlabThread *thread1;

    MatlabCmdDlg *M_dialog1;
};

//#pragma execution_chaeacter_set("utf-8")

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    thread1=new UseMatlabThread;

    connect(ui->pushButton_openME,SIGNAL(clicked()),this,SLOT(openME()));
    connect(ui->pushButton_closeME,SIGNAL(clicked()),this,SLOT(closeME()));

    connect(thread1,SIGNAL(detach_cmd()),this,SLOT(detach_mcmd()));
    connect(thread1,SIGNAL(finished()),this,SLOT(finishME()));


}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::detach_mcmd()
{
    WId wid=(WId)FindWindow(NULL, L"MATLAB Command Window");

    //WId wid=(WId)FindWindow(L"Edit", NULL);
    //wid=(WId)FindWindow(nullptr,nullptr);

   qDebug()<<"cmd win id"<<wid<<endl;
   QWindow * m_window=QWindow::fromWinId(wid);

   QWidget *m_widget;
   m_widget = QWidget::createWindowContainer(m_window, this->ui->widget_cmd);


   m_widget->setMinimumSize(841,111);
   m_widget->setMaximumSize(16777215,16777215);
   m_widget->show();

}


void MainWindow::openME()
{
    thread1->start();
    thread1->isStop=false;
    qDebug()<<"主线程 id"<<QThread::currentThreadId();
}

void MainWindow::closeME()
{
    thread1->closeThread();
    thread1->wait();
}


void MainWindow::finishME()
{
    qDebug()<<"finish";
}

Qt中调用MatlabEngine总结 Qt中调用Matlab的方法: 1.调用matlab封装成的dll 2.调用matlab生成的exe 3.使用MatlabEngine。 接下来,总结一下Qt调用MatlabEngine的过程。 Qt调用MatlabEngine本质上是在Qt中打开Matlab平台。 首先,.pro文件中配置好engine.h的头文件和 lib库文件。engine在一般在Matlab的extern文件夹 阅读详情

相关推荐

Qt图形与Matlab的结合

通过Qt调用Matlab引擎或使用Matlab的COM接口,可以实现与Matlab的交互和数据处理。读者可以根据自己的需求,进一步研究和探索Qt和Matlab的集成技术,开发出更加功能丰富、灵活的应用程序。然后,在代码中引入Matlab引擎的头文件,创建一个引擎对象,并调用相应的Matlab函数进行数据处理。Qt是由挪威公司Trolltech(现在是Qt公司)开发的开源C++框架,它提供了一套易于使用的API,用于构建现代化、响应式的应用程序。以上是关于Qt图形与Matlab的结合的相关内容和源代码示例。

uote_e的博客 967

QT调用matlab库

QT调用matlab库1 .pro文件设置1.添加头文件2.添加库文件2 主程序设置 1 .pro文件设置 1.添加头文件 INCLUDEPATH += $$quote(D:/Program Files/MATLAB/R2018b/extern/include) INCLUDEPATH += $$quote(D:/Program Files/MATLAB/R2018b/extern/include/win64) 2.添加库文件 LIBS+=-L$$quote(D:/Program Files/MAT

hello1268的博客 1556

Qt 资料指南 —— 在MATLAB中使用Qt进行图形界面开发

在MATLAB中,除了进行科学计算和数据分析外,有时我们还需要为我们的应用程序添加图形界面,以提供更好的用户体验。本文将为您介绍如何在MATLAB中使用Qt进行GUI开发,并提供相应的源代码。通过安装Qt框架、配置MATLAB与Qt的连接、创建Qt应用程序以及编译与运行应用程序等步骤,您可以在MATLAB中构建出更加交互式和用户友好的应用程序。您可以从Qt官方网站下载并安装适用于您的操作系统的Qt版本。安装完成后,确保在系统环境变量中设置了正确的Qt路径,以便MATLAB能够正确地找到Qt相关的文件和库。

CodeWWWCode的博客 435

[Qt]QT嵌入Matlab Engine实现Matlab Cmd窗口(1)

原创文章,欢迎转载。转载请注明:转载自 祥的博客 原文链接: 文章目录@[toc]环境1.问题来源2.最终实现的测试效果3.解决思路 QT嵌入Matlab Engine实现Matlab Cmd窗口(1) 环境 Window7 x64 VS2015 Qt5.11.3 x64 Matlab R2013 x64 如果不知道如何配置Matlab和C++的混合编程可以先看一下这两篇文章: VS和...

祥的专栏 2518

Qt与Matlab的图形应用

接下来,我们通过Matlab Engine API获取图形数据,并使用Qt的图形场景和项来绘制图形路径。最后,我们将图形场景设置给Qt的图形视图,以展示绘制的图形。通过调用Matlab Engine API,我们可以在Qt应用程序中嵌入Matlab代码,并实现丰富的图形应用。通过以上示例代码,您可以开始在Qt中利用Matlab绘制自己的图形应用程序。接下来,我们将通过在Qt中调用Matlab的功能来实现图形的绘制。通过以上步骤,我们可以在Qt应用程序中实现调用Matlab绘制图形的功能。

2301_79331230的博客 710

Qt 自定义界面之与 Matlab 的集成

通过调用 Matlab 命令行或使用 Matlab 引擎 API,我们可以在 Qt 应用程序中调用 Matlab 的函数和脚本,实现各种功能的扩展和优化。它使用 C++ 编写,通过信号与槽机制实现了优雅的事件处理,提供了丰富的控件和功能模块,使开发者能够快速构建高效、美观的应用程序。用户可以通过界面选择需要处理的图像,然后使用 Matlab 提供的图像处理算法进行处理,并在界面中显示处理后的图像。然后,我们可以根据用户的选择调用 Matlab 的相关函数,实现图像的处理。二、Matlab 的特点与应用。

学习使你进步。 407

超详细基于Qt平台实现C/C++调用Matlab函数全流程

基于Qt平台实现C/C++调用Matlab函数,将Matlab函数封装成.dll文件,再在Qt平台上调用.dll文件实现调用Matlab函数。

m15279530607_163的博客 1万+

Qt 自定义界面与 Matlab 的集成

Qt 是一个跨平台的 C++ 框架,具有强大的图形用户界面功能,而 Matlab 是一款强大的数值计算和数据可视化工具。本文将介绍如何通过 Qt 实现自定义界面,并集成 Matlab 功能。通过以上步骤,我们可以实现 Qt 自定义界面,并集成 Matlab 功能。开发者可以根据自己的需要进行界面设计和功能扩展,实现更加复杂和丰富的应用。希望这篇文章对你有所帮助!运行上述代码,将在 Qt 窗口中显示 Matlab 计算得到的图像。运行上述代码,将执行 Matlab 脚本,并输出变量 x 的数值。

m0_47037246的博客 582

qt调用matlab engine

设置Qt工程,包含matlab engine的库和相关头文件目录。 注意:matlab的库目录一定要和所用的Qt编译器匹配,否则在链接时会出现错误。qt用mingw那么就包含matlab的mingw库,同时注意位数,我的matlab只有64位的库,所以qt中就只好用mingw64编译器。同时路径中不能有空格!!!! 配置qt工程的环境变量PATH,加入matlab在运行时的文件路径 H...

asd1147170607的博客 1764

Qt自定义界面与Matlab集成

接下来,我们将创建一个基本的Qt应用程序,并添加一个按钮和一个文本框。接下来,我们将创建一个基本的Qt应用程序,并添加一个按钮和一个文本框。在Qt Creator的设计模式下,双击按钮,将自动跳转到代码编辑器,并生成按钮的点击事件处理程序。在Qt Creator的设计模式下,双击按钮,将自动跳转到代码编辑器,并生成按钮的点击事件处理程序。编译并运行应用程序,当用户点击按钮时,将调用Matlab函数并将结果显示在文本框中。编译并运行应用程序,当用户点击按钮时,将调用Matlab函数并将结果显示在文本框中。

CyberSparkZ的博客 213

Qt 资源系统与 Matlab 的集成

总结一下,Qt 的资源系统为与其他平台和工具的集成提供了便利,特别是在与 Matlab 的集成中。借助 Qt 的资源系统,我们可以将 Matlab 脚本文件嵌入到 Qt 项目中,并通过 Qt 提供的 API 进行访问和调用。通过将 Matlab 脚本文件嵌入到 Qt 应用程序中,我们可以充分发挥 Qt 强大的图形界面能力,并结合 Matlab 的高性能计算功能,实现更加复杂和功能完善的应用程序。在 Qt 的资源系统中,资源文件通常以 “.qrc” 为后缀名,其中包含了需要嵌入的文件信息和路径。

PixelDyno的博客 331

QT与MATLAB混合编程详解

QT与MATLAB混合编程详解

qq_72583325的博客 3080

Qt Creator与Matlab集成指南

通过这种方式,您可以在Qt Creator中利用Matlab的数值计算和数据分析功能,以及Qt Creator的图形界面开发能力,来创建更复杂和功能丰富的应用程序。通过将Matlab的功能与Qt Creator的开发工具相结合,开发者可以充分利用两者的优势,实现更复杂和功能丰富的应用程序。它提供了丰富的数学和科学函数库,以及强大的绘图和可视化工具。通过将Matlab与Qt Creator集成,开发者可以充分利用Matlab的功能,并将其与Qt Creator的开发环境相结合,从而实现更高效的应用程序开发。

2301_79331387的博客 243

Qt与Matlab集成:使用第三方库实现高效开发

通过用户在Qt界面上输入Matlab代码,我们可以通过第三方库打开Matlab引擎,并将代码传递给Matlab引擎执行。用户在Qt界面上输入完Matlab代码后,点击"Run"按钮执行Matlab代码。要在Qt中使用Matlab,首先需要安装Matlab Engine API for C++。该函数获取用户在文本编辑框中输入的Matlab代码,并通过MatlabEngine的实例来调用Matlab函数。这个函数使用Matlab引擎API打开Matlab引擎,执行传入的代码字符串,然后关闭引擎。

与其临渊羡鱼,不如退而结网 666

Qt与MATLAB的结合与应用

通过使用MATLAB引擎,我们可以在Qt应用程序中直接调用MATLAB的函数和算法;无论是在科学计算、图像处理还是数据可视化方面,Qt与MATLAB的结合都为开发者带来了丰富的工具和资源。近年来,Qt和MATLAB作为两个功能强大的软件开发平台,都在各自领域内得到了广泛的应用。使用MATLAB引擎,可以在Qt应用程序中直接调用MATLAB的函数和算法。Qt是一套跨平台的C++应用程序开发框架,通过丰富的图形和用户界面工具,使开发者能够快速构建功能齐全的应用程序。Qt与MATLAB的结合与应用。

pytorchCode的博客 1587

Qt 中使用第三方库 Matlab

在Qt项目中,您需要包含Matlab的头文件,以便在代码中使用Matlab的功能。在Qt项目中,您需要包含Matlab的头文件,以便在代码中使用Matlab的功能。在您的代码中,您需要连接Matlab引擎,以便执行Matlab命令和函数。在您的代码中,您需要连接Matlab引擎,以便执行Matlab命令和函数。在您完成了Matlab的使用后,记得关闭Matlab引擎以释放资源。在您完成了Matlab的使用后,记得关闭Matlab引擎以释放资源。以下是一个简单的示例,执行了Matlab中的。

TechWhizKid的博客 410

在vs2019中编写qt程序,并调用matlab

vs2019编写qt程序调用matlab

qq_57838995的博客 1119

Virtualbox “Kernel driver not installed (rc=-1908)”问题全面解析与修复指南

本文全面解析了Virtualbox出现'Kernel driver not installed (rc=-1908)'错误的原因及修复方法。详细介绍了如何通过重新安装virtualbox-dkms、处理Secure Boot特殊情况等步骤解决该问题,并提供了预防措施与最佳实践,帮助用户避免类似错误再次发生。

weixin_30352645的博客 530
上一篇: windows下qt的kits Selection
下一篇: ALERT! UUID=xxxxxxxxx does not exist. Dropping to a shell!
qinxinger
博客等级 码龄8年 19粉丝 15原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值