QT应用编程: windows下QT调用COM组件并集成到QT界面

简介: QT应用编程: windows下QT调用COM组件并集成到QT界面

一、环境介绍

操作系统: win10 64位


QT版本: 5.12.6


Visual Studio IDE 版本:  2017


二、创建COM组件

为了方便测试,我这里使用QT来创建COM组件,再由QT自己调用。 理论上任何语言生成的COM组件调用流程应该都是一样的。


QT创建COM的方法看这里:


(1) VS2017下使用QT生成COM组件:      https://blog.csdn.net/xiaolong1126626497/article/details/112556866


(2) QtCreate下生成COM组件:  https://blog.csdn.net/xiaolong1126626497/article/details/112550412


本次文章是接着上一篇文章写的,创建的COM组件可以参考上一篇文章:  


QT应用编程: windows下QT调用COM组件:  https://blog.csdn.net/xiaolong1126626497/article/details/112978956


三、QtCreate里创建工程调用COM组件完成界面开发

上一篇文章里介绍了在QtCreate里使用QAxObject调用COM组件,并完成函数接口调用;如果调用的COM组件是带界面的程序,并需要集成到当前QT程序中,就需要使用QAxWidget实现。


3.1 方式1

直接在工程里写代码,new一个QAxWidget并添加到布局器即可。代码里都有注释。


这里的工程采用的上一篇文章的工程 ,链接: https://blog.csdn.net/xiaolong1126626497/article/details/112978956

    QAxWidget *ax_widget = new QAxWidget(nullptr,nullptr);
    ax_widget->resize(500,500);
    //指定调用的COM组件类ID,这个ID要填正确.
    ax_widget->setControl(QString::fromUtf8("{fe8bb3a1-998e-4318-b4ee-4263a1cc06a2}"));
    //导出支持调用的函数接口
    QString DOC = ax_widget->generateDocumentation();
    QFile outFile("com_function.html");
    outFile.open(QIODevice ::ReadWrite|QIODevice ::Text);
    QTextStream TS(&outFile);
    TS<<DOC<<endl;
    //调用com组件开放的函数:  查看COM组件版本号
    QString result;
    result=ax_widget->dynamicCall("VersionNumber()").toString();
    qDebug()<<"插件的版本号:"<<result;
    //调用com组件开放的函数: 加载视频文件
    QVariantList params;
    params={100,100};
    int val=ax_widget->dynamicCall("sum(int,int)", params).toInt();
    qDebug()<<"求和运算:"<<val;
    //新建布局
    QHBoxLayout *layout = new QHBoxLayout;
    //添加ax_widget到布局器
    layout->addWidget(ax_widget);
    //设置当前页面布局
    this->setLayout(layout);

image.png

代码写完之后,直接运行即可。  注意:  运行代码之前,COM组件一定要先注册才能调用。

image.png

3.2 方式2

为了方便界面设计,这可以直接在UI设计师界面,拖一个axWidget控件出来。

image.png

image.png

注意:  下面图片里,右键选择的COM组件,必须要先注册成功之后才能看到。 

image.png

image.png

image.png

代码块:

#include "com_widget.h"
#include "ui_com_widget.h"
com_widget::com_widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::com_widget)
{
    ui->setupUi(this);
    QAxWidget *ax_widget = ui->axWidget;
    //指定调用的COM组件类ID,这个ID要填正确.
    ax_widget->setControl(QString::fromUtf8("{fe8bb3a1-998e-4318-b4ee-4263a1cc06a2}"));
    //导出支持调用的函数接口
    QString DOC = ax_widget->generateDocumentation();
    QFile outFile("com_function.html");
    outFile.open(QIODevice ::ReadWrite|QIODevice ::Text);
    QTextStream TS(&outFile);
    TS<<DOC<<endl;
    //调用com组件开放的函数:  查看COM组件版本号
    QString result;
    result=ax_widget->dynamicCall("VersionNumber()").toString();
    qDebug()<<"插件的版本号:"<<result;
    //调用com组件开放的函数: 加载视频文件
    QVariantList params;
    params={100,100};
    int val=ax_widget->dynamicCall("sum(int,int)", params).toInt();
    qDebug()<<"求和运算:"<<val;
}
com_widget::~com_widget()
{
    delete ui;
}

image.png

目录
相关文章
|
28天前
|
前端开发 数据可视化 JavaScript
基于React的简易数据可视化图表库集成与应用
基于React的简易数据可视化图表库集成与应用
19 1
|
1月前
|
存储 网络协议 C语言
【C/C++ 串口编程 】深入探讨C/C++与Qt串口编程中的粘包现象及其解决策略
【C/C++ 串口编程 】深入探讨C/C++与Qt串口编程中的粘包现象及其解决策略
79 0
|
1月前
|
项目管理 微服务
云效常见问题之将多个微服务应用集成到一次研发流程中发布上线如何解决
云效(CloudEfficiency)是阿里云提供的一套软件研发效能平台,旨在通过工程效能、项目管理、质量保障等工具与服务,帮助企业提高软件研发的效率和质量。本合集是云效使用中可能遇到的一些常见问题及其答案的汇总。
28 0
|
1月前
|
安全 前端开发 C++
C++视角下的Qt按钮:从基础应用到高级定制(二)
C++视角下的Qt按钮:从基础应用到高级定制
45 2
|
6天前
|
测试技术 持续交付 开发工具
《Git 简易速速上手小册》第6章:Git 在持续集成/持续部署(CI/CD)中的应用(2024 最新版)
《Git 简易速速上手小册》第6章:Git 在持续集成/持续部署(CI/CD)中的应用(2024 最新版)
29 2
|
10天前
|
安全 中间件 数据处理
中间件在应用集成
中间件是应用集成的关键,它连接不同系统、平台和应用,解决兼容性问题,实现数据交换和功能互操作。主要应用包括数据集成、服务集成、消息传递、安全与权限管理。选择中间件需考虑兼容性、性能、可扩展性和安全性。中间件简化通信,提高系统性能和可靠性,助力企业实现应用高效协同和商业价值。
14 2
|
12天前
|
JSON Kubernetes Go
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
24 0
无缝集成:在IntelliJ IDEA中利用Kubernetes插件轻松管理容器化应用
|
23天前
|
存储
Qt更新组件出现(“要继续此操作,至少需要一个有效且已启用的储存库”)
Qt更新组件出现(“要继续此操作,至少需要一个有效且已启用的储存库”)
Qt更新组件出现(“要继续此操作,至少需要一个有效且已启用的储存库”)
|
29天前
|
测试技术 API UED
【Qt 应用开发 】初步理解 Qt窗口中的模态性应用
【Qt 应用开发 】初步理解 Qt窗口中的模态性应用
70 1
|
1月前
|
存储 算法 数据可视化
Qt与Excel:从底层原理到上层应用的全面探索
Qt与Excel:从底层原理到上层应用的全面探索
36 0

推荐镜像

更多