当前位置: 首页 > news >正文

QT6中QAxWidget功能与用法

一.概述

1.简介

 在 Qt 中,QAxWidget 是专门用于与 ActiveX 控件 交互的核心类,属于 Qt 的 ActiveX 模块(axcontainer)。它的主要作用是在 Qt 应用程序中嵌入和操控 Windows 平台特有的 ActiveX 组件,实现与 Office 软件(如 Word、Excel)、浏览器控件、多媒体播放器等 Windows 原生组件的集成。

2.核心作用

ActiveX 是 Windows 平台的一种组件对象模型(COM)技术,许多 Windows 应用(如 Microsoft Office、IE 浏览器)会提供 ActiveX 接口供外部程序调用。

QAxWidget 作为 Qt 与 ActiveX 的 “桥梁”,主要功能包括:

嵌入 ActiveX 控件到 Qt 界面中(如在 Qt 窗口中显示 Excel 表格、网页);

调用 ActiveX 控件的方法(如让 Excel 执行保存、打印操作);

访问和修改 ActiveX 控件的属性(如设置 Excel 单元格的值);

接收 ActiveX 控件触发的事件(如 Excel 单元格内容变化时通知 Qt 程序)。

二.代码示例

1.环境配置

使用 QAxWidget 需满足以下条件:

平台限制:仅支持 Windows 系统(ActiveX 是 Windows 特有技术);

模块依赖:在 Qt 项目文件(.pro)中添加 axcontainer 模块:

QT += axcontainer  # 启用 ActiveX 相关类

控件注册:需要使用的 ActiveX 控件必须已在系统中注册(通常安装对应软件后会自动注册,如安装 Office 后会注册 Excel 的 ActiveX 控件)。

2.创建并加载 IE 浏览器控件

#include <QAxWidget>

#include <QWidget>

// 在 Qt 窗口中嵌入网页浏览器

QWidget *parentWidget = new QWidget();

QAxWidget *webBrowser = new QAxWidget(parentWidget);

// 加载 IE 浏览器 ActiveX 控件(ProgID: "Shell.Explorer")

bool loaded = webBrowser->setControl("Shell.Explorer");

if (!loaded) {

    // 加载失败(可能控件未注册)

    qWarning() << "无法加载浏览器控件!";

    return;

}

// 设置控件大小并显示

webBrowser->setGeometry(0, 0, 800, 600);

parentWidget->show();

// 导航到指定网页

webBrowser->dynamicCall("Navigate(const QString&)", "https://www.baidu.com");

3.操控 Excel 控件

#include <QAxWidget>

#include <QVariant>

// 创建 Excel 控件

QAxWidget *excel = new QAxWidget();

excel->setControl("Excel.Application");  // 加载 Excel ActiveX 控件

// 设置 Excel 可见(默认不可见)

excel->setProperty("Visible", true);  // 调用属性设置

// 获取工作簿集合(Workbooks)

QAxObject *workbooks = excel->querySubObject("Workbooks");

// 新建一个工作簿(调用 Workbooks.Add() 方法)

workbooks->dynamicCall("Add()");

// 获取当前活动工作表(Worksheet)

QAxObject *worksheet = excel->querySubObject("ActiveSheet");

// 设置单元格内容(如 A1 单元格设为 "Hello Qt")

QAxObject *cell = worksheet->querySubObject("Cells(int, int)", 1, 1);  // Cells(行, 列)

cell->dynamicCall("SetValue(const QVariant&)", "Hello Qt");

// 保存工作簿(调用 SaveAs 方法,参数为保存路径)

QString savePath = "C:/test.xlsx";

worksheet->querySubObject("Parent")->dynamicCall(

    "SaveAs(const QString&)",

    QVariant(savePath)

);

// 清理资源

delete cell;

delete worksheet;

delete workbooks;

// 关闭 Excel(可选)

// excel->dynamicCall("Quit()");

// delete excel;

三.注意事项

平台限制:QAxWidget 仅在 Windows 平台有效,Linux/macOS 不支持 ActiveX 技术。

控件依赖:需确保目标系统已安装并注册所需的 ActiveX 控件(如使用 Excel 控件需安装 Microsoft Office)。

线程安全:ActiveX 控件通常不支持多线程调用,需在主线程中操作 QAxWidget。

版本兼容:不同版本的 ActiveX 控件(如 Office 2016 与 Office 2021)接口可能存在差异,需测试兼容性。

http://www.dtcms.com/a/395998.html

相关文章:

  • 龙虎榜——20250922
  • 使用springboot开发仓库管理系统
  • TwinCAT3_C++_Simulink教程学习
  • 解码颜色空间:RGB、HSV与YUV
  • Maya绑定:创建控制器标准流程
  • EasyClick JavaScript eval用法
  • mosquitto求医之路(2):mosquitto倒下了
  • 【Java数据结构】——动态规划,分治,回溯
  • 【开题答辩全过程】以 基于Springboot的个性化运动管理平台为例,包含答辩的问题和答案
  • 静默安装 Oracle Database 21c on CentOS 7.6
  • 【数值分析】07-非线性方程的求根方法-基本概念、二分法求根
  • Golang常用Web开发库
  • Sub-GHz射频芯片,如何降低IoT终端功耗,提升传输性能?
  • 敏捷管理核心:价值驱动与快速响应的底层逻辑
  • 使用pip命令离线安装python库
  • Kubernetes 控制器深度解析:DaemonSet
  • 38.应用层协议HTTP(一)
  • VMware虚拟机ubuntu20.04共享文件夹无法使用
  • PyTorch 神经网络工具箱核心知识点总结
  • 豆包Seedream 4.0:全面测评、玩法探索与Prompt解读
  • STM32_02_GPIO
  • Flink SlotSharingGroup 机制详解
  • Final Cut Pro X fcpx音视频剪辑编辑(Mac中文)
  • 【LeetCode_88】合并两个有序数组
  • PromptPilot 发布:AI 提示词工程化新利器,首月零元体验
  • MySQL-详解数据库中的触发器
  • JVM调优实战及常量池详解
  • 字典树(Trie)
  • AI浏览器概述:Browser Use、Computer Use、Fellou
  • 「docker」三、3分钟快速安装docker