Qt界面中嵌入其他exe程序的界面,使用Qt5


下面用一個小例子來演示如何在Qt的界面中嵌入其他exe程序的界面,最終效果如下圖所示。本文參考了

http://blog.csdn.net/jiaoyaziyang/article/details/49802993,感謝原作者。

 

 

 

下面是具體的實現方法,用Windows自帶的計算器程序做例子。主要的思路就是獲取到計算器程序的窗口類名稱,然后在Qt中利用QWindow的靜態函數fromWinId,創建出QWindow對象,然后將這個對象放到一個QWidget中。

 

首先是獲取計算器程序的窗口類名稱,主要利用的是VS中的Spy++工具,在VS菜單“工具”中,打開之后如下圖所示

 

然后Ctr+F,進行搜索,出現如下界面

確定之后可以獲取到類名

 

 完整的代碼如下所示,這段代碼是放在了一個QMainWindow的構造函數中,首先是調用了windows的API創建了計算器程序的進程,然后思路同前面所述。

 

 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(50);

    WId wid = (WId)FindWindow(L"CalcFrame",NULL);
    //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);

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM