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

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
Qt中,可以使用布局管理器来实现子窗口嵌入窗口的效果。布局管理器提供了一种自动调整子窗口大小和位置的机制,以确保它们适应父窗口的大小变化。 首先,您需要在父窗口中创建一个布局管理器。可以使用QVBoxLayout或QHBoxLayout,具体取决于您希望子窗口是垂直还是水平排列。 然后,将子窗口添加到布局中。您可以使用addWidget()函数将子窗口添加到布局中。 最后,将布局设置为父窗口的主布局,使用setLayout()函数。 以下是一个示例代码,演示了如何将一个名为childWidget的子窗口嵌入一个名为parentWidget的父窗口: ``` QWidget *parentWidget = new QWidget; QVBoxLayout *layout = new QVBoxLayout(parentWidget); QWidget *childWidget = new QWidget; // 在这里设置子窗口的内容 layout->addWidget(childWidget); parentWidget->setLayout(layout); ``` 这样,子窗口childWidget就会嵌入到父窗口parentWidget中,并且会自动调整大小和位置以适应父窗口的变化。 希望这可以帮助您实现将子窗口嵌入窗口的效果。如果还有其他问题,请随时提问。<span class="em">1</span> #### 引用[.reference_title] - *1* [QT中将 子窗口添加到父窗口中,并实现子窗口随父窗口大小伸缩。](https://blog.csdn.net/ken2232/article/details/129109419)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值