外部进程嵌入到Qt进程界面
来源:互联网 发布:李腾飞 java 编辑:程序博客网 时间:2024/06/08 10:09
有时候需要做框架集成的东西,需要把其他客户端像组件一样集成到一个客户端中,类似于一个软件集成的平台客户端,统一用一个中心管理的客户端做类似于控制面板一样的东西去调用不同的软件。此时就必须相应不同的点击图标的事件去嵌入到主界面里面。下面简单的对windows平台上面Qt的界面中嵌入系统自带的计算机程序做简单的说明。
一、首先是获取计算机程序的窗口类名称,只要利用的是VS中的Spy++工具,在vs菜单“工具”中打开之后如图所示。查找计算器的窗口句柄并获取到具体的类名。
CTRL+F,搜索句柄,获取到对应的类名。
二、通过windows系统函数获取软件进程窗口的句柄。
#include<Windows.h>WId wid = (WId)FindWindow(L"CalcFrame", L"计算器");
接口中的第一个参数是类名称,也就是界面中“类”中有个标题,第二个参数是窗口名称,打开“常规”,填写标题,这个软件窗口名称为“计算器”,填入参数即可。
三、获取QWindow。
QWindow*m_window;
m_window= QWindow::fromWinId(wid);
m_window->setFlags(m_window->flags()|Qt::CustomizeWindowHint|Qt::WindowTitleHint); //这边可以设置一下属性
四、获取代理QWidget。
m_widget = QWidget::createWindowContainer(m_window, this->ui->widget); //第二个参数是作为window的父类,也可以用layout
具体的代码如下所示,代码放在了一个widget的构造函数中。
winId.h
#pragma once#include <QtWidgets/QWidget>#include "ui_winId.h"class winId : public QWidget{Q_OBJECTpublic:winId(QWidget *parent = Q_NULLPTR);~winId();private:Ui::winIdClass *ui;};winId.cpp
#include "stdafx.h"#include "winId.h"winId::winId(QWidget *parent): QWidget(parent),ui(new Ui::winIdClass){ui->setupUi(this);//创建进程//QString cmd="C:/Program Files/R/R-3.3.1/bin/x64/Rgui.exe";QString cmd = "C:/Windows/system32/calc.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(5000);WId wid = (WId)FindWindow(L"CalcFrame", L"计算器");//WId wid = (WId)FindWindow(L"Rgui Workspace",NULL);QWindow *m_window;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(400, 300);}winId::~winId(){delete ui;}最后的运行效果如下图。
另外在git上面也有一个例子,具体路径为:https://github.com/snasoft/qt-windows-composition-example
阅读全文
0 0
- 外部进程嵌入到Qt进程界面
- 将外部进程嵌入到Qt中
- 将外部程序嵌入到Qt界面中
- 把另一进程的窗体界面嵌入到当前程序中
- 【Qt开发】调起外部程序/进程
- Qt / C++ 如何关闭外部进程
- Qt中QProcess 打开外部进程
- 进程管理器恢复到原始界面
- QT学习笔记——打开(关闭)外部进程
- QT开发之QProcess进程运行外部程序
- Qt进程
- VC实现A进程窗口嵌入到B进程窗口中显示的方法
- [积累]调用外部进程
- Java 调用外部进程
- 操作外部进程
- Qt 开启进程,查找进程,关闭进程
- SDl嵌入到QT中
- OpenGL嵌入到Qt中
- tensorflow暂未兼容cuda9.0, 安装cuda8.0
- PAT1013
- 数据的异常处理
- Eclipse Git+Gerrit配置及提交流程
- 井下矿工,白书P318LA5131(点双连通分量应用)
- 外部进程嵌入到Qt进程界面
- jquery 实现 图片上传 预览
- 线程监控
- myEclipse更改网站名称
- Xcode工程直接拖
- 171114—程序学习:猜数游戏。
- Beaglebone Black 开发笔记
- #!/bin/bash和#!/bin/sh是什么意思以及区别
- OpenCV.Resize详解