前言
在软件系统集成中,有时需要集成一些第三方的软件到我们的系统中。一个常用的方法是通过系统调用的方式把第三方软件弹出来,这种方法简单粗暴。另一个方法是将第三方软件嵌入到我们自己的应用程序界面中,本文重点讲解下这种方法如何来实现。
一、实现效果
如下嵌入的第三方软件是“SQLiteStudio.exe”,一款SQL数据库客户端程序。
嵌入的效果如下:
二、实现步骤
具体的实现步骤,主要分以下几步:
1.通过进程调用的方式,启动要嵌入的第三方目标程序;
2.通过类名或者窗口名,查找要嵌入的第三方目标程序,以获取其窗口句柄;
3.在我们自己的程序主界面中,嵌入目标程序的窗口;
以下是具体的实现代码:
ProcessToolset::ProcessToolset(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
//启动进程
QProcess* pProcess = new QProcess(this);
QString strCmd = QString("D:/Program Files/SQLiteStudio/SQLiteStudio.exe");
pProcess->start(strCmd, QStringList() << "");
pProcess->waitForStarted();
//通过类名查找窗口,以确保进程正常启动
HWND hWhd = NULL;
for (unsigned int i=0; i<30; i++)
{
hWhd = FindWindow(L"Qt5152QWindowIcon", NULL);
if (hWhd != NULL)
break;
Sleep(1000);
}
if (hWhd == NULL)
return;
//在主界面窗口中嵌入目标窗口
WId wid = (WId)hWhd;
QWindow* pDestWindow = QWindow::fromWinId(wid);
pDestWindow->setFlags(pDestWindow->flags() | Qt::CustomizeWindowHint | Qt::WindowTitleHint);
QWidget* pChildWidget = QWidget::createWindowContainer(pDestWindow, this->ui.centralWidget);
setCentralWidget(pChildWidget);
pChildWidget->show();
}