将外部程序嵌入到Qt界面中

最近在做一个多方软件集成的一个平台,就涉及到将已成熟的软件集成到QT界面中,下边记录一下整个摸索的过程和方法


下边以Foxmail为例进行说明:

第一步:启动软件

   QString cmd = QString("D:/Program Files/Foxmail 7.2/Foxmail.exe");
    m_process.start(cmd,QStringList()<<"");
    
    if(!m_process.waitForFinished(3000))
    {
        qDebug()<<"--------";
    }
第二步:获得窗口的句柄      

     #include 
     WId wid = (WId)FindWindow(L"TFoxMainFrm.UnicodeClass",NULL);

搞清上面这个接口的参数着实大费周章

        (1) 首先打开Foxmail软件

         (2)打开电脑VS的Microsoft Spy++软件,并在里边搜索

           将外部程序嵌入到Qt界面中_第1张图片

开始一直以为是使用第2个,使用时总是无法正常嵌入,无意中发现上面的1跟2有关系,就试了一下,果然用错了

所以在一个软件会开好多个窗口,找的时候一定要找对

接口中的第一个参数是类名称,也就是界面中“类”中有个标题,第二个参数是窗口名称,打开“常规”,填写标题,格式看接口例子

              正如这个软件的窗口名称是空的,因此填“NULL”即可

第三步:获取QWindow

          QWindow *m_window;

                   m_window = QWindow::fromWinId(wid);
		m_window->setFlags(m_window->flags() | Qt::CustomizeWindowHint | Qt::WindowTitleHint); //这边可以设置一下属性

第四步:获取代理QWidget

                 QWidget *m_widget;

          m_widget = QWidget::createWindowContainer(m_window,this); //第二个参数是作为window的父类,也可以用layout,此处就不解释了
    

  第五步: 显示

将外部程序嵌入到Qt界面中_第2张图片

大功告成啦!!!!!!!!!!!



你可能感兴趣的:(QT)