qt运行外部exe并自定义外部功能界面(QWidget添加工具栏QToolBar)

news2024/9/23 23:22:29

先放效果图,就是在qt运行的界面中,不只是运行出了外部exe的界面,还可以在外围放置自定义的功能按钮。(本质就是在QWidget中添加工具栏QToolBar)
在这里插入图片描述

关于如何只运行出外部的exe,我之前写过教程:https://blog.csdn.net/changyana/article/details/128436097。关于如何运行外部exe的那部分代码我将不做赘述,因为在前边这篇教程中已经给出讲解。建议先看一遍之前的教程及代码,本篇文章我是在之前代码的基础上进行分析和工具栏添加的。

首先就是创建一个新项目,区别于之前的教程(指的是我上边放链接的那篇教程),在Class选择这里,本次选择的是QWidget,之前选择的是MainWindow。(因为我看了一下之前运行出来的代码,之前的代码是在MainWindow的类里新建使用了QWidget,也没有用到MainWindow,这次干脆直接就创建QWidget的类)
在这里插入图片描述

还有之前的代码是直接放在main.cpp里的,个人觉得main.cpp主要是用来作为程序的启动入口,而加载的功能函数应该实现模块化,放在其它的功能cpp文件里,所以本次实现是将上述的功能都放在了widget.cpp的构造函数里。

看一下文件结构
在这里插入图片描述

主要的实现思路就是分为两部分,在页面放置了两个QWidget。第一个QWidget就是QToolBar(因为QToolBar是继承自QWidget,看下图),第二个QWidget就是加载出的外部exe,然后自己设置一下垂直布局,就可以展现出上边的示例图样式。
在这里插入图片描述

下边我放上widget.cpp文件的代码。

#include "widget.h"
#include "ui_widget.h"
#include <QApplication>
#include <QDebug>
#include <QWidget>
#include <QProcess>
#include <QWindow>
#include <Windows.h>
#include <QVBoxLayout>
#include <QToolBar>
#include <QAction>

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

    // 运行第三方exe
    QProcess *m_process = new QProcess();
    m_process->start("D:/homework/Blender/build_windows_x64_vc17_Release/bin/Debug/blender.exe",QStringList()<<""); // 1.可执行exe的路径

    if(!m_process->waitForFinished(-1))
    {
        qDebug()<<"--------";
    }

    WId wid = (WId)FindWindow(L"GHOST_WindowClass", NULL); // 2.需要嵌入的exe的界面的类名称
    QWindow *m_window = QWindow::fromWinId(wid);
    m_window->setFlags(m_window->flags() | Qt::CustomizeWindowHint | Qt::WindowTitleHint); //这边可以设置一下属性
    QWidget *m_widget  = QWidget::createWindowContainer(m_window, this);
    m_widget->setMinimumSize(1000, 800);//外部exe窗口大小

    // 自定义功能按钮
    QAction *new_action = addAction("新建");
    QAction *open_action = addAction("打开");
    QToolBar *tool_bar = new QToolBar();
    tool_bar->addAction(new_action);
    tool_bar->addAction(open_action);

    QVBoxLayout *vbox_layout = new QVBoxLayout();
    vbox_layout->addWidget(tool_bar);       // 添加功能按钮
    vbox_layout->addWidget(m_widget);       // 添加外部exe

    setLayout(vbox_layout);

    // 响应功能按钮
    connect(new_action, &QAction::triggered, this ,[=](){
        qDebug() << "点击了新建";
    });

    connect(open_action, &QAction::triggered, this ,[=](){
        qDebug() << "点击了打开";
    });
}

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


可以看到我的第三方exe设置的宽高是1000*800,所以最外层的界面窗口一定要大于这个,我是设置的1200*900
在这里插入图片描述

然后widget.h和main.cpp都没有做改动,都是系统默认生成的,更改的文件是widget.cpp和widget.ui。

然后保存运行,就可以看到如图效果啦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/137774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

序列生成策略——束搜索、贪心搜索、穷举搜索

序列搜索策略包括贪心搜索、穷举搜索和束搜索。 贪心搜索所选取序列的计算量最小&#xff0c;但精度相对较低。 穷举搜索所选取序列的精度最高&#xff0c;但计算量最大。 束搜索通过灵活选择束宽&#xff0c;在正确率和计算代价之间进行权衡。 在序列到序列学习&#xff08…

Java集合面试题汇总大全

每个集合的出现一定是为了解决某种问题的解决方案。 集合流程图 JAVA中集合和数组的区别Collection和Collections的区别ArrayList和LinkedList 和Vector的区别list/set/map的区别HashSet和TreeSet和LinkedHashSet区别HashMap和Hashtable的比较HashMap和ConcurrentHashMap区别H…

【零基础】学python数据结构与算法笔记5

文章目录前言30.归并排序归并31.归并排序实现32.归并排序时间复杂度讨论33.NB三人组小结总结前言 学习python数据结构与算法&#xff0c;学习常用的算法&#xff0c; b站学习链接 30.归并排序归并 将两个箭头指向两个列表的首个元素&#xff0c;比较&#xff0c;哪个大就把它…

Java IO流 - 字符流的使用详细介绍

文章目录字符流的使用文件字符输入流创建字符输入流字符输入流读取文件字符输出流创建字符输出流字符输出流写入字符流的使用 字节流读取中文输出会存在什么问题&#xff1f; 会乱码。或者内存溢出。 读取中文输出&#xff0c;哪个流更合适&#xff0c;为什么&#xff1f; 字符…

MAX78000训练自己的神经网络模型

参考&#xff1a; The MAX78000 Microcontroller, Some Coffee, and Artificial Intelligence GitHub - MaximIntegratedAI/ai8x-training: Model Training for ADIs MAX78000 and MAX78002 AI Devices ai8x-synthesis/WSL2.md at develop MaximIntegratedAI/ai8x-synthesi…

移动金融管理系统设计与开发实训(课程设计报告)——基于Android+Django的银行系统部分功能设计与实现

阅读过程中若有不解和需要可私信&#xff0c;乐于解答 项目代码文档都保存着 基于AndroidDjango的银行系统部分功能开发与设计 摘要&#xff1a; 随着信息技术的快速发展以及经济的快速发展&#xff0c;金融界的信息化的进程也在不断推进&#xff0c;信息技术的不断成熟和人…

JavaWeb:EL表达式JSTL标签

1&#xff0c;EL表达式 1.1 概述 EL&#xff08;全称Expression Language&#xff09;表达式语言&#xff0c;用于简化JSP页面内的Java代码。 EL表达式的主要作用是 获取数据 。其实就是从域对象中获取数据&#xff0c;然后将数据展示在页面上。 而EL表达式的语法也比较简单…

HR软件七步帮助企业管理员工

对于中小企业&#xff08;SMB&#xff09;来说&#xff0c;员工就意味着一切。你的员工几乎掌握着企业的整体增长和发展&#xff0c;他们可以成就企业&#xff0c;但也能破坏企业的发展。为了提高员工效率&#xff0c;中小型企业需要出色的人力资源管理。员工只有在受到重视和培…

【Linux】Linux环境变量的理解

加油布鲁斯&#xff0c;你能行的&#xff01; 文章目录一、环境变量PATH中的系统默认搜索路径1.将程序安装到/usr/bin目录&#xff08;不带./运行自己写的程序&#xff09;2.将程序路径添加到PATH环境变量里面&#xff08;不带./运行自己写的程序&#xff09;二、环境变量的深…

PyTorch基础部分——毕设进行时

为了完成毕设准备开始学习PyTorch&#xff0c;第一步到蓝桥云课搜索实验项目&#xff0c;找到了“PyTorch入门与实战&#xff08;第二版&#xff09;”&#xff0c;开始边实验边学习&#xff08;本身有了一点点点点的相关基础了&#xff09;学习传送门&#xff1a;PyTorch基础入…

SQL WHERE 子句

WHERE 子句用于过滤记录。 SQL WHERE 子句 WHERE 子句用于提取那些满足指定条件的记录。 SQL WHERE 语法 SELECT column1, column2, ... FROM table_name WHERE condition; 参数说明&#xff1a; column1, column2, ...&#xff1a;要选择的字段名称&#xff0c;可以为多个…

06SpringCloudAlibaba负载均衡服务调用-OpenFeign

目录 SpringCloud Feign 查看此博客&#xff1a;005SpringCloud--Feign&#xff1a;负载均衡(基于服务端)_gh_xiaohe的博客-CSDN博客 OpenFegin概述 OpenFeign是什么&#xff1a; OpenFegin能干什么 Feign和OpenFeign两者区别 OpenFeign使用步骤 服务消费者 接口注解 微…

TP相关知识

说明 该文章来源于徒弟lu2ker转载至此处&#xff0c;更多文章可参考&#xff1a;https://github.com/lu2ker/ 文章目录说明PHP中有一些内置类PHP反序列化问题绕过姿势&#xff1a;魔术方法&#xff08;反序列化如何利用&#xff09;CMS可能存在的部分逻辑问题$_REQUEST相关安全…

小游戏引擎选型参考指南

写在前面 前面写了几期有关于小游戏的文章&#xff0c;主要从小游戏开发、小游戏运营、小游戏变现等多个角度进行了较为粗略的介绍&#xff0c;很多同学表示对小游戏引擎部分很感兴趣&#xff0c;希望能够有一些更为深入的分析介绍。今天就对目前主流的小游戏引擎进行探讨。 …

Java 并发编程 (二)CountDownLatch和CyclicBarrier的使用

CountDownLatch和CyclicBarrier CountDownLatch 功能介绍 CountDownLatch 是一个同步功能的辅助类 线程计数不为0时呈wait状态如果为0则继续执行。通过await 和 countDown 两个方法来实现等待和继续运行。 作用&#xff1a;一个线程或多个线程等待另一个线程或多个线程完成后…

2003-2021年高铁列车信息

2003-2021年高铁列车信息 1、时间&#xff1a;2003-2021年 2、指标&#xff1a; 列车车次、出发站、出发站所属地级市、出发站所属省份、出发站类型、到达站、到达站所属地级市、到达站所属省份、到达站类型、车型、开车时间、到站时间、运行时间、里程 3、指标说明&#x…

58. 微调(fine-tuning)

前面的一些章节介绍了如何在只有6万张图像的Fashion-MNIST训练数据集上训练模型。 我们还描述了学术界当下使用最广泛的大规模图像数据集ImageNet&#xff0c;它有超过1000万的图像和1000类的物体。 然而&#xff0c;我们平常接触到的数据集的规模通常在这两者之间。 假如我们…

3、基于注解的IoC装配与依赖注入

一、XML开启注解支持 1、添加context名称空间 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:context&…

03SpringCloudAlibaba服务注册中心—Zookeeper

目录 注册中心Zookeeper 五步曲&#xff1a; zookeeper服务提供者 1、03-cloud-provider-payment-zookeeper-8004 2、pom.xml 3、改yum 4、主启动 5、业务类 测试1&#xff1a; 测试2&#xff1a; ​ 服务节点是临时节点还是持久节点 粗划分&#xff1a; 细划分&am…

南京晓庄Java期末知识点复习

南京晓庄Java期末知识点复习第一章 Java 语言概述第二章 Java 语法基础标识符基本数据类型**运算符****语句**数组和字符串命令行参数输入输出第三章 类五个基本概念类类的封装类的继承**抽象类**接口关键字常用的工具类第四章 Applet及其应用**Java程序的两种基本形式****Appl…