最近写各小工具,需要嵌入他人的程序,所以记录一下使用方式:
void createFrame::on_pushButton_6_clicked() {
removeLayout(ui->widget, ui->widget->layout());
d698_exe = QCoreApplication::applicationDirPath() +
QString("/App/TopsParser/TopsParser.exe");
isStopFind = true;
procThreExec.start(d698_exe);
QTimer::singleShot(6000, this, &createFrame::stopFindWindow/* 可以用lamba语句 这里就是将标志位 isStopFind == false */);
while (isStopFind) {
wid645 =
(WId)FindWindow(L"TMainFrm", L"通讯报文解析工具__V1.0.2.1_141215");
if (wid645 == 0) {
continue;
}
break;
}
if (isStopFind == false)
return;
mWin = QWindow::fromWinId(wid645);
mWin->setFlags(mWin->flags() | Qt::CustomizeWindowHint | Qt::WindowTitleHint);
mWidget = QWidget::createWindowContainer(mWin);
/* resize大小控制 */
resize(1333, 768);
hLayout = new QHBoxLayout();
pl645_3762 = new proc645_3762();
pl645_3762->setWidget(mWidget);
hLayout->addWidget(pl645_3762);
ui->widget->setLayout(hLayout);
ui->widget->show();
}
代码主要实现:
1. QProcess 启动第三方exe
2. 循环查找 目标exe的标题(这个需要用到spyxx_amd64.exe)
3. 根据找到的句柄创建Qt窗口
4. 将创建好的串口布局嵌入我们的Qt窗口之中.
收工完事了.