Qt嵌入外部EXE程序,并显示在主界面中!

一、获取程序句柄以及类

打开Visual Studio 进行查询
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、QT调用程序

H文件

#ifndef VISUAL_H
#define VISUAL_H

#include <QWidget>
#include <QProcess>
#include<Windows.h>
#include<QWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class Visual; }
QT_END_NAMESPACE

class Visual : public QWidget
{
    Q_OBJECT

public:
    Visual(QWidget *parent = nullptr);
    ~Visual();


private:
    Ui::Visual *ui;
    QProcess *process;
    QWindow * m_window;
};
#endif // VISUAL_H

CPP文件

#include "visual.h"
#include "ui_visual.h"

Visual::Visual(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Visual)
{
    ui->setupUi(this);
    process = new QProcess(this);
    QString cmd = "C:/Users/CSJ/Desktop/CeleX5Demo_x64/CeleXDemo.exe";
    STARTUPINFO si = { sizeof(si) };
    PROCESS_INFORMATION pi;
    si.dwFlags = STARTF_USESHOWWINDOW;
    si.wShowWindow = true;
    bool bRet = CreateProcess(
                NULL,
                (LPWSTR)cmd.toStdWString().c_str(),
                NULL,
                NULL,
                FALSE,
                CREATE_NEW_CONSOLE,
                NULL,
                NULL, &si, &pi);

    Sleep(1000);
    WId wid = (WId)FindWindow(L"Qt5QWindowIcon", L"CeleXDemo");//获取窗口句柄
    m_window = QWindow::fromWinId(wid);
    m_window->setFlags(m_window->flags() | Qt::CustomizeWindowHint | Qt::WindowTitleHint); //

    QWidget *m_widget;
    m_widget = QWidget::createWindowContainer(m_window, this->ui->widget);
    m_widget->setMinimumSize(1938, 1048);
}

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


最终效果:
在这里插入图片描述
完成QT外部调用!!

  • 5
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
可以使用QProcess类在QWidget嵌入exe程序。QProcess类提供了一个接口,可以在应用程序启动外部程序并与其进行交互。以下是一个简单的示例代码: ```cpp #include <QtWidgets> #include <QProcess> class MainWindow : public QWidget { Q_OBJECT public: MainWindow(QWidget *parent = nullptr) : QWidget(parent) { // 创建一个按钮 QPushButton *button = new QPushButton("启动外部程序", this); button->setGeometry(10, 10, 150, 30); // 连接按钮的clicked信号到startProcess()槽函数 connect(button, &QPushButton::clicked, this, &MainWindow::startProcess); // 设置窗口大小和标题 setFixedSize(200, 50); setWindowTitle("嵌入外部程序"); } private slots: void startProcess() { // 创建一个QProcess对象 QProcess *process = new QProcess(this); // 启动外部程序 process->start("path/to/your/exe"); // 将外部程序的窗口嵌入到当前窗口 process->setProcessChannelMode(QProcess::ForwardedChannels); process->waitForStarted(); WId wid = process->pid(); QWidget *container = QWidget::createWindowContainer(QWindow::fromWinId(wid), this); container->setGeometry(0, 50, width(), height() - 50); container->show(); } }; ``` 在这个示例代码,我们创建了一个QPushButton对象,当用户点击按钮时,我们使用QProcess启动外部程序,并将其窗口嵌入到当前窗口。需要注意的是,在Windows系统下,使用QProcess启动的外部程序可能无法直接获取到其窗口句柄,因此我们需要使用QWindow::fromWinId()函数获取外部程序的窗口句柄,并将其嵌入到QWidget

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值