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

目录
相关文章
|
9月前
|
NoSQL Redis 数据安全/隐私保护
Redis 最流行的图形化界面下载及使用超详细教程(带安装包)! redis windows客户端下载
文章提供了Redis最流行的图形化界面工具Another Redis Desktop Manager的下载及使用教程,包括如何下载、解压、连接Redis服务器以及使用控制台和查看数据类型详细信息。
1677 6
Redis 最流行的图形化界面下载及使用超详细教程(带安装包)! redis windows客户端下载
|
9月前
|
NoSQL Redis 数据库
Redis 图形化界面下载及使用超详细教程(带安装包)! redis windows下客户端下载
文章提供了Redis图形化界面工具的下载及使用教程,包括如何连接本地Redis服务器、操作键值对、查看日志和使用命令行等功能。
1231 0
Redis 图形化界面下载及使用超详细教程(带安装包)! redis windows下客户端下载
|
11月前
|
Linux C++ Windows
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
【Azure 应用服务】Azure App Service(Windows)环境中如何让.NET应用调用SAP NetWeaver RFC函数
|
8月前
|
安全 前端开发 Windows
Windows Electron 应用更新的原理是什么?揭秘 NsisUpdater
本文介绍了 Electron 应用在 Windows 中的更新原理,重点分析了 `NsisUpdater` 类的实现。该类利用 NSIS 脚本,通过初始化、检查更新、下载更新、验证签名和安装更新等步骤,确保应用的更新过程安全可靠。核心功能包括差异下载、签名验证和管理员权限处理,确保更新高效且安全。
193 4
Windows Electron 应用更新的原理是什么?揭秘 NsisUpdater
|
8月前
|
自然语言处理 运维 开发工具
深入探讨了 NeoVim 相较于传统 Vim 的优势,包括更好的扩展性、现代化的界面和用户体验、多语言编程支持、强大的异步处理能力、更好的协作支持、持续的更新和改进、活跃的社区以及与现代开发工具的集成
本文深入探讨了 NeoVim 相较于传统 Vim 的优势,包括更好的扩展性、现代化的界面和用户体验、多语言编程支持、强大的异步处理能力、更好的协作支持、持续的更新和改进、活跃的社区以及与现代开发工具的集成。通过命令对比,展示了两者在启动、配置、模式切换、移动编辑、搜索替换、插件管理、文件操作、窗口缓冲区管理和高级功能等方面的差异。总结部分强调了 NeoVim 在多个方面的显著优势,解释了为什么越来越多的运维人员选择 NeoVim。
516 3
|
10月前
|
编译器 Windows
plugin cannot be loaded for module “QtQuick“ && Could not load the Qt platform plugin “windows“
本文讨论了在Qt应用程序中遇到的平台插件加载问题,包括具体的错误信息、解决方案和参考链接。问题表现为无法加载“QtQuick”模块的插件,并且无法找到“windows”平台插件。解决方案是修改环境变量`Qt5_DIR`以使用正确的Qt版本和编译器环境。
647 1
|
9月前
|
XML 缓存 前端开发
Electron-builder 是如何打包 Windows 应用的?
本文首发于微信公众号“前端徐徐”,作者徐徐深入解析了 electron-builder 在 Windows 平台上的打包流程。文章详细介绍了 `winPackager.ts`、`AppxTarget.ts`、`MsiTarget.ts` 和 `NsisTarget.ts` 等核心文件,涵盖了目标创建、图标处理、代码签名、资源编辑、应用签名、性能优化等内容,并分别讲解了 AppX/MSIX、MSI 和 NSIS 安装程序的生成过程。通过这些内容,读者可以更好地理解和使用 electron-builder 进行 Windows 应用的打包和发布。
502 0
|
9月前
|
数据可视化 程序员 C#
C#中windows应用窗体程序的输入输出方法实例
C#中windows应用窗体程序的输入输出方法实例
150 0
|
11月前
|
Unix Linux Ruby
在windows和linux上高效快捷地发布Dash应用
在windows和linux上高效快捷地发布Dash应用
462 4
|
11月前
|
Linux iOS开发 开发者
跨平台开发不再难:.NET Core如何让你的应用在Windows、Linux、macOS上自如游走?
【8月更文挑战第28天】本文提供了一份详尽的.NET跨平台开发指南,涵盖.NET Core简介、环境配置、项目结构、代码编写、依赖管理、构建与测试、部署及容器化等多个方面,帮助开发者掌握关键技术与最佳实践,充分利用.NET Core实现高效、便捷的跨平台应用开发与部署。
1115 3

热门文章

最新文章

推荐镜像

更多
  • qt