Qt嵌入MFC界面

7 篇文章 0 订阅
1 篇文章 0 订阅

环境说明

Qt版本:5.12 Mingw32
操作系统:win10

嵌入的原因

使用某公司提供的数据采集相关的动态链接库,但该链接库在VS下可正常运行,而在Qt下却无法运行。苦于项目申请书中已经说明,该项目的软件需使用Qt进行开发,不得已才出此下策。在VS下使用MFC调用动态连接库进行数据的采集,将MFC的界面进行打包后使用Qt调用,并MFC的界面嵌入到Qt中,实现应有功能。

操作过程

1、将MFC编译的exe即相关的动态链接库文件复制到Qt编译的工程目录下。
在这里插入图片描述
2、确定MFC文件的窗口的相关信息。打开VS的spy++工具和需要嵌入的MFC的exe文件窗口,并入图拖动获取,类或标题名称即可。
在这里插入图片描述
在这里插入图片描述
3、使用以下代码。

       QProcess myProcess(this);
       QString program =  "CPPClientSDKDemo.exe";
       myProcess.startDetached(program);
          Sleep(50);
      HWND wid= FindWindow(NULL,L"ClientSDK调用Demo");
      //NULL处可填写类名,"ClientSDK调用Demo"处填写的是标题,两者只需要一项即可。
      QWindow *m_window;
       m_window =QWindow::fromWinId((WId)wid);
       m_window->setFlags(m_window->flags() | Qt::CustomizeWindowHint | Qt::WindowTitleHint);

        QWidget *m_widget;
        QWidget *bottom=new QWidget();
         m_widget = QWidget::createWindowContainer(m_window,bottom,Qt::FramelessWindowHint);
        QVBoxLayout *layout1=new QVBoxLayout();
         layout1->addWidget(m_widget);
         ui->widget->setLayout(layout1);


        //setCentralWidget(m_widget);
        //如果采用全窗口显示,取消这一句的注释即可

4、效果展示,点击按钮即可在widget中嵌入MFC窗口。
在这里插入图片描述

在这里插入图片描述

总结

项目开始前一定要注意尽量用一种软件进行开发,VS或者Qt都没有问题,不要等到项目做到一半要进行程序的结合是才发现不兼容,那样问题就太严重了。不兼容是一个非常恐怖也非常费时间的问题。希望以后做项目之前能多注意一下,尽量不要再用到这篇博客的内容。

  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值