调用外部程序,并将其窗口嵌入新程序主窗口界面

这篇具有很好参考价值的文章主要介绍了调用外部程序,并将其窗口嵌入新程序主窗口界面。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Windows下QT嵌入外部程序窗口

要嵌入外部程序窗口,需要将外部程序的标题栏去掉

setWindowFlags(Qt::FramelessWindowHint);
需要的头文件
#include <windows.h>
#include <QProcess>
#include <QWindow>

QProcess* inster_process = NULL;
QString cmd = "F:/mapset_engine/mapset/MapExe/debug/mapset.exe";
WId wid = 0;
窗口嵌入
    if(wid == 0)
    {
        inster_process = new QProcess(this);
        inster_process->setProcessChannelMode(QProcess::MergedChannels);
        inster_process->start(cmd);
        //  时间影响到进程窗口句柄获取,太短获取不到
        Sleep(1500);

        //Qt5QWindowIcon为程序窗口类,map为外部程序的窗口名
        //可以用利用vs自带工具spy++得到程序的类名或窗口名等
        wid = (WId)FindWindow(L"Qt5QWindowIcon", L"map");//获取窗口句柄
        qDebug() << "wid = " << wid;
        QWindow *m_window = QWindow::fromWinId(wid);
//        m_window->setFlags(m_window->flags() | Qt::CustomizeWindowHint);

        QWidget *m_widget;
        m_widget = QWidget::createWindowContainer(m_window, this);
//        m_widget->setFixedSize(QSize(670,400));
        m_widget->setMinimumSize(QSize(670,400));
//        ui->verticalLayout_2->addWidget(m_widget);
        ui->scrollArea->setWidget(m_widget);
    }
    else
    {
        qDebug()<<"wid = "<<wid;
        qDebug()<<"地图已嵌入!";
    }
关闭调用的外部程序(不完善,有待优化)
        //法一、杀死进程
        std::string exit_cmd = "taskkill /f /PID " + std::to_string(inster_process->processId());
        qDebug()<<"exid_cmd = "<< QString::fromStdString(exit_cmd);
        system(exit_cmd.c_str());

//   法二、终止子窗口进程
//    if(inster_process->processId() != 0)
//    {
//        inster_process->terminate();
//        inster_process->waitForFinished();
//        wid = 0;
//        qDebug()<<"wid = "<<wid;
//    }
//    else
//    {
//        qDebug()<<"进程已结束";
//    }
利用vs自带工具spy++得到已打开程序的类名或窗口名

qt如何将打开的exe放入窗口,qt,ui,开发语言

点击spy++会跳出如下窗口:
qt如何将打开的exe放入窗口,qt,ui,开发语言

点击第5个查找窗口的图标,跳出如下窗口:

qt如何将打开的exe放入窗口,qt,ui,开发语言

运行要嵌入的外部程序,将上图查找程序工具后的图标拖到运行的程序窗口,即可得到对应窗口句柄等,如下所示:(示例:将图标拖到左边随意运行的程序的窗口)
qt如何将打开的exe放入窗口,qt,ui,开发语言文章来源地址https://www.toymoban.com/news/detail-612800.html

到了这里,关于调用外部程序,并将其窗口嵌入新程序主窗口界面的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • UE5 运行时捕捉外部窗口并嵌入到主窗口

    UE5 运行时捕捉外部窗口并嵌入到主窗口的一种方法 创建一个Slate类用于生成一个窗口 创建一个Actor类,用于调用Slate类中的方法

    2024年02月11日
    浏览(27)
  • 【QT】自定义工程封装成DLL并如何调用(带ui界面的)

    一、动态库的封装 1、首先新建一个Library工程 2、修改类型为共享库,自定义项目名称以及项目路径 3、选择编译器 4、选择动态库所需要的模块 5、自定义类名,点击下一步 6、点击下一步 7、项目总览 8、此时的文件中还没有ui文件,因为要封装带界面的动态库,需要右键点击

    2024年02月03日
    浏览(46)
  • Qt C++中调用python,并将软件打包发布,python含第三方依赖

    工作中遇到qt c++调用我的python 代码,并且想要一键打包,这里我根据参考的以及个人实践的结果来简单实现一下。 环境:windows系统,QT Creater 4.5, python 3.8(anaconda虚拟环境) 1.创建QT工程 中间省略3个步骤图。创建完成后,如图。 首先提示各位从python过来的同仁 ,QT中有时

    2024年01月20日
    浏览(49)
  • 24. 在QML界面中嵌入QWidget窗口

    1. 说明: 目前QT官方主推的界面开发方式是采用QML进行界面设计,但在QML未流行之前,很多的项目都是采用QWidget开发的,把之前的代码全部转换为QML代码显然工作量非常大,如果能将QWidget窗口嵌入到QML界面中,那么开发效率将提高很多,且QML无法实现的功能也能借助于QWid

    2024年02月01日
    浏览(36)
  • QT---将第三方软件窗口嵌入窗口中

    通过Windows API获取窗口句柄。 代码如下:

    2024年02月12日
    浏览(71)
  • QT界面中再添加界面窗口

    目录 使用场景: 教程: 1.首先创建一个qt设计师界面类 2.现在你有界面了,但是没有创建 3.创建了界面,但是没有容纳该界面的地方,这个时候就要选择容纳的界面, 4.创建完成控件以后开始添加界面,大体的方法基本都是这个 首先说一下使用场景,很多时候一个界面会包含很多不

    2024年02月16日
    浏览(39)
  • Qt动态调用(外部调用)SDK库(dll动态库)

    ​​​​​​​  之前的文章,介绍了Qt调用sdk库的方式,大家可以点击查看(Q调用SDK库(dll动态库))之前的文章,里面介绍的调用方式就是静态的调用方式。如下图所示,需要提供.h文件,dll文件和lib文件。  本篇文章主要实现通过一个dll文件,外部动态调用的方式来调用我

    2024年02月09日
    浏览(39)
  • 嵌入式 QT 界面布局管理

    目录 1、实例程序功能 2、界面组件布局 2.1 界面组件的层次关系 2.2 布局管理 2.3 伙伴关系和Tab顺序       创建一个 Widget Application 项目 samp2_2, 在创建窗体时选择基类 QDialog ,生成的类命名为 QWDialog ,并选择生成窗体。     如 此 新建 的项 目 samp2_2 有一 个界 面文 件 qwdi

    2024年02月04日
    浏览(50)
  • 如何在本地安装Flask并将其web界面发布到公网上远程访问协同开发

    目录 前言 1. 安装部署Flask 2. 安装Cpolar内网穿透 3. 配置Flask的web界面公网访问地址 4. 公网远程访问Flask的web界面 本篇文章讲解如何在本地安装Flask,以及如何将其web界面发布到公网上并进行远程访问。 Flask是目前十分流行的web框架,采用Python编程语言来实现相关功能。较其他

    2024年02月04日
    浏览(40)
  • 如何链接多个modbus_tcp设备,并将设备数据写入同一个modbusSlave,以便外部客户端获取所有链接设备的数据。

    在modbus通信中,一个modbus服务器一次只能链接一个客户机,那么,外部客户端要获取多个设备的modbus数据,就需要使用链接一个专用的mosbus服务器,一下就是详细解决方法。 第一步:创建modbus客户端,链接一个modbus设备,然后再链接一个共有的modbus服务器,modbus客户端可以连

    2024年04月25日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包