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

  

 

转载于:https://www.cnblogs.com/gaoxudong0704/p/5986730.html

可以使用QProcess类在QWidget嵌入exe程序。QProcess类提供了一个接口,可以在应用程序启动外部程序并与其进行交互。以下是一个简单的示例代码: ```cpp #include <QtWidgets> #include <QProcess> class MainWindow : public QWidget { Q_OBJECT public: MainWindow(QWidget *parent = nullptr) : QWidget(parent) { // 创建一个按钮 QPushButton *button = new QPushButton("启动外部程序", this); button->setGeometry(10, 10, 150, 30); // 连接按钮的clicked信号到startProcess()槽函数 connect(button, &QPushButton::clicked, this, &MainWindow::startProcess); // 设置窗口大小和标题 setFixedSize(200, 50); setWindowTitle("嵌入外部程序"); } private slots: void startProcess() { // 创建一个QProcess对象 QProcess *process = new QProcess(this); // 启动外部程序 process->start("path/to/your/exe"); // 将外部程序窗口嵌入到当前窗口 process->setProcessChannelMode(QProcess::ForwardedChannels); process->waitForStarted(); WId wid = process->pid(); QWidget *container = QWidget::createWindowContainer(QWindow::fromWinId(wid), this); container->setGeometry(0, 50, width(), height() - 50); container->show(); } }; ``` 在这个示例代码,我们创建了一个QPushButton对象,当用户点击按钮时,我们使用QProcess启动外部程序,并将其窗口嵌入到当前窗口。需要注意的是,在Windows系统下,使用QProcess启动的外部程序可能无法直接获取到其窗口句柄,因此我们需要使用QWindow::fromWinId()函数获取外部程序窗口句柄,并将其嵌入到QWidget
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值