qt中父进程窗口嵌入子进程产生的窗口

2024-04-27 16:58

本文主要是介绍qt中父进程窗口嵌入子进程产生的窗口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

笔者从事客户端开发工作,客户端有很多模块,比如视频预览,视频回放,我这里采取的是多进程架构,客户端框架是一个进程,视频预览是一个进程,视频回放是一个进程,客户端框架负责将视频预览和视频回放产生的窗口嵌入。

工作流程如下:
1.编写一个基于QWidget的工程,产生的窗口作为父窗口
2.编写一个基于QWidget的工程,产生的窗口作为子窗口,其中子窗口的风格要求是 Qt::CustomizeWindowHint | Qt::FramelessWindowHint
3.父进程窗体的构造函数里面启动子进程
4.子进程启动后,将自身的窗口句柄发给父进程
5.父进程收到子进程发来的窗口句柄后,进行嵌入操作

上面5个步骤中,最后一个步骤就是今天要讲的主题,第4个步骤,采取进程间通信的方式进行窗口句柄传递,比如管道方式。

核心代码如下所示,其中szGlobalBuffer表示的是从管道里面得到的子进程的窗口句柄
void ParentWidget::ReceiveChildWinId()
{
printf(“ReceiveChildWinId begin, szGlobalBuffer is %s\n”, szGlobalBuffer);
WId childWnd = atoi(szGlobalBuffer);
if (NULL == m_pSubWidget)
{
m_pSubWidget = QWidget::createWindowContainer(QWindow::fromWinId(childWnd));
}
//m_pSubWidget->setWindowFlags(Qt::CustomizeWindowHint | Qt::FramelessWindowHint);
//m_pSubWidget->resize(CalculateRect().size()); // 防止发送默认尺寸 640 480
m_pSubWidget->setParent(this);
m_pSubWidget->show();
}
其中,
m_pSubWidget = QWidget::createWindowContainer(QWindow::fromWinId(childWnd));
是将子进程的窗口句柄转换成QWidget 对象,然后setParent进行父子窗口绑定。
父进程窗口嵌入子进程窗口,在windows和linux下都验证通过。
linux的效果如下:
在这里插入图片描述
其中红色部分是子进程窗口的窗口。

代码已经上传到csdn上了,vs2015+qt5.9.6,下面是下载地址:

https://download.csdn.net/download/tusong86/12377331

这篇关于qt中父进程窗口嵌入子进程产生的窗口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/941043

相关文章

Linux中的进程间通信之匿名管道解读

《Linux中的进程间通信之匿名管道解读》:本文主要介绍Linux中的进程间通信之匿名管道解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基本概念二、管道1、温故知新2、实现方式3、匿名管道(一)管道中的四种情况(二)管道的特性总结一、基本概念我们知道多

Linux进程终止的N种方式详解

《Linux进程终止的N种方式详解》进程终止是操作系统中,进程的一个重要阶段,他标志着进程生命周期的结束,下面小编为大家整理了一些常见的Linux进程终止方式,大家可以根据需求选择... 目录前言一、进程终止的概念二、进程终止的场景三、进程终止的实现3.1 程序退出码3.2 运行完毕结果正常3.3 运行完毕

Qt 中 isHidden 和 isVisible 的区别与使用小结

《Qt中isHidden和isVisible的区别与使用小结》Qt中的isHidden()和isVisible()方法都用于查询组件显示或隐藏状态,然而,它们有很大的区别,了解它们对于正确操... 目录1. 基础概念2. 区别清见3. 实际案例4. 注意事项5. 总结1. 基础概念Qt 中的 isHidd

QT移植到RK3568开发板的方法步骤

《QT移植到RK3568开发板的方法步骤》本文主要介绍了QT移植到RK3568开发板的方法步骤,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录前言一、获取SDK1. 安装依赖2. 获取SDK资源包3. SDK工程目录介绍4. 获取补丁包二

Qt把文件夹从A移动到B的实现示例

《Qt把文件夹从A移动到B的实现示例》本文主要介绍了Qt把文件夹从A移动到B的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录如何移动一个文件? 如何移动文件夹(包含里面的全部内容):如何删除文件夹:QT 文件复制,移动(

Windows命令之tasklist命令用法详解(Windows查看进程)

《Windows命令之tasklist命令用法详解(Windows查看进程)》tasklist命令显示本地计算机或远程计算机上当前正在运行的进程列表,命令结合筛选器一起使用,可以按照我们的需求进行过滤... 目录命令帮助1、基本使用2、执行原理2.1、tasklist命令无法使用3、筛选器3.1、根据PID

linux本机进程间通信之UDS详解

《linux本机进程间通信之UDS详解》文章介绍了Unix域套接字(UDS)的使用方法,这是一种在同一台主机上不同进程间通信的方式,UDS支持三种套接字类型:SOCK_STREAM、SOCK_DGRA... 目录基础概念本机进程间通信socket实现AF_INET数据收发示意图AF_Unix数据收发流程图A

Qt实现发送HTTP请求的示例详解

《Qt实现发送HTTP请求的示例详解》这篇文章主要为大家详细介绍了如何通过Qt实现发送HTTP请求,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、添加network模块2、包含改头文件3、创建网络访问管理器4、创建接口5、创建网络请求对象6、创建一个回复对

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台