消息关闭
    暂无新消息!

Qt嵌入并展示其他程序的疑问!

问题作者 : 随想2017-07-12发布
大家好,目前正在做的项目需要用QT作为外壳,嵌入一个完全独立的exe(其他语言编写)。遇到了一个exe展示的问题,通过Qt外壳上的按钮点击启动exe,启动完成后使用createWindowContainer嵌入,由于不知道exe具体启动耗时,所以采用的方法是Qt程序与内嵌exe用消息通信,exe启动完成后给Qt发送消息,执行内嵌。 具体代码:
       WId wid = (WId)FindWindow(L"WindowsForms10.Window.8.app.0.141b42a_r9_ad1", NULL);
QWindow *m_window;
m_window = QWindow::fromWinId(wid);
widget_Main = QWidget::createWindowContainer(m_window,this);
      this->setCentralWidget(widget_Main);
出现的问题是:exe启动了但是无法嵌入Qt,或者嵌入了但是界面上未显示,我没太弄明白。但是如果不用发送消息方式,在Qt上多放一个按钮,点击按钮执行上述代码,则正常将exe嵌入Qt外壳并展示。
请问各位,发送消息的方式与手动点击按钮的方式有什么区别,发送消息的方式如何能正确显示内嵌的exe,小弟刚学qt,对一些机制不太明白,请大家帮忙,谢谢!

6个回答

︿ 2


    QProcess::startDetached("notepad.exe");
    WId wid = 0;
    do
    {
        QEventLoop loop;
        QTimer::singleShot(1, &loop, SLOT(quit()));
        loop.exec();

        wid = (WId)FindWindowW(L"Notepad", NULL);
    }while(wid == 0);

    QWindow *m_window;
    m_window = QWindow::fromWinId(wid);
    QWidget *widget_Main = QWidget::createWindowContainer(m_window,this);
    this->setCentralWidget(widget_Main);


加延时可以工作哦.
︿ 1
 WId wid = (WId)FindWindow(L"WindowsForms10.Window.8.app.0.141b42a_r9_ad1", NULL);
这句执行结果不为空应该就说明完全启动了吧,还要exe发送消息去告知吗?
︿ 1
Qt走的是信号槽机制,你点击按钮响应对应的槽函数,在该槽函数中去调用exe就行了