Qt中使用ActiveX控件
(转自:http://blog.csdn.net/tingsking18/article/details/5403038)
在Qt中使用ActiveX控件
Qt的windows商业版本提供了ActiveQt这个framework,使用这个组件我们可以在Qt中使用ActiveX控件,并且也开发基于Qt的ActiveX控件。ActiveQt包含了两个组件QAxContainer和QAxServer。
l QAxContainer允许我们使用COM对象,并且可以将将ActiveX控件嵌入到Qt程序中去。
l QAxServer可以将我们写的Qt控件导出为COM对象或者是ActiveX控件。
第一个例子我们来演示一下在Qt中使用shockwaveFlash这个ActiveX控件。
#include <QApplication>
#include <QtGui>
#include <QAxWidget>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QAxWidget *flash = new QAxWidget(0,0);
flash->resize(500,80);
flash->setControl(QString::fromUtf8("{d27cdb6e-ae6d-11cf-96b8-444553540000}"));
flash->dynamicCall("LoadMovie(long,string)",0,"c:/1.swf");
flash->show();
return a.exec();
}
QAxContainer不包含在QtCore里面,所以要使用QAxContainer的话还必须要在.pro文件中添加 CONFIG+=qaxcontainer
下面就来解释一下上面的代码:
1. 首先我们创建了一个QAxWidget对象。QAxWidget对象是用来封装ShockwaveFlash这个ActiveX控件。QAxContainer是有三个类组成的。分别是:QAxObject封装了COM对象、QAxWidget封装了ActiveX控件、QAxBase是QAxObject和QAxWidget的父类,它实现了封装COM的核心函数。
这三个类的关系如下:
2. 然后通过setControl设置ShockwaveFlash这个ActiveX控件的class_id,class ID可以通过一些其它的编程工具获得(vc/Delphi/Microsoft ActiveX Control Pad)。这时就会调用CoCreateInstance创建ActiveX控件的实例。这时这个ActiveX控件的所有的属性、方法、事件将通过QAxWidget转换为Qt的properties、signals和slots。
通过调用QAxWidget的property()方法和SetProperty方法可以获取和设置ActiveX控件的属性。
既然可以调用ActiveX控件的方法属性,当然也就需要有COM中的数据类型和Qt中的使用的数据类型的转换了。下面就是COM中数据类型和Qt中的数据类型对应的表格:
3. 通过dynamicCall方法来调用ActiveX控件的方法。
1)dynamicCall()最多传递八个QVariant类型的参数,并且返回类型也是QVariant。
2)如果我们需要传递IDispatch *或者是IUnknown *,我们可以将这些组件封装成QAxObject,然后通过调用asVariant()方法来将这个COM对象转换为QVariant。同样如果我们返回一个IDispatch*或者IUnknown*的对象,就需要通过querySubObject方法将这个对象转换为QAxObject。
QAxObject *session = outlook.querySubObject("Session");
3)如果不想这样做还可以QAxWidget还为我们提供了QueryInterface方法
IWebBrowser2 *webBrowser = 0;
activeX->queryInterface(IID_IWebBrowser2, (void *)&webBrowser);
if (webBrowser) {
webBrowser->Navigate2(pvarURL);
webBrowser->Release();
}
4)dynamicCall方法还可以设置COM控件的属性:
activeX->dynamicCall("Value", 5);
QString text = activeX->dynamicCall("Text").toString();
5)通过dynamicCall调用COM对象的方法的时候需要提供完成的函数签名。
activeX->dynamicCall("Navigate(const QString&)", "qt.nokia.com");
Qt中使用ActiveX控件的更多相关文章
- 在Qt中使用ActiveX控件
Qt的windows商业版本提供了ActiveQt这个framework,使用这个组件我们可以在Qt中使用ActiveX控件,并且也开发基于Qt的ActiveX控件.ActiveQt包含了两个组件QA ...
- Qt开发Activex笔记(二):Qt调用Qt开发的Activex控件
若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/113789693 长期持续带来更多项目与技术分享 ...
- 如何向VS2010中插入ActiveX控件并且附带相应的类
上两篇文章中我们已经讲述了ActiveX控件的一些相关知识,本文中,简单说明一下如何在我们自己的程序中使用ActiveX控件.(仍以我们上节课的例子为例) 我们打开VS2010编辑器,新建一个基于对话 ...
- EXCEL2007出错了无法使用文档中的ActiveX 控件
EXCEL2007出错了无法使用文档中的ActiveX 控件虽说是很久之前的问题,但是正确的解决方法和原因如下!原因:系统update之后出现的问题解决方法:删除C:\Users\[username] ...
- 【VS开发】在VS2010中开发ActiveX控件设置测试容器的方式
在VS2010中开发ActiveX控件设置测试容器的方式 借鉴文章http://blog.csdn.net/waxgourd0/article/details/7374669 在VS2010中开发MF ...
- 如何在VS2010中添加ActiveX控件及使用方法
方法1: 1.首先在在项目上面右击添加类,如下图所示: 2.点击添加ActiveX控件中的MFC类 3.找到需要添加的ActiveX类. 4.点击完成即可. 5.此时转到资源视图,打开如下视图.可能工 ...
- 【VS开发】VS2010中导入ActiveX控件
方法1: 1.首先在在项目上面右击添加类,如下图所示: 2.点击添加ActiveX控件中的MFC类 3.找到需要添加的ActiveX类. 4.点击完成即可. 5.此时转到资源视图,打开如下视图.可能工 ...
- IE中的activex控件
1.tree控件 DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><HTML><HE ...
- QT 中怎样使得控件与 界面等比例变化
转自:https://github.com/exoticknight/blog-post/blob/master/python-with-Qt-application-development/pyth ...
随机推荐
- 【android】activity、fragment传值例子
1:Activity篇 1.1向Activity传值 关键点在于putExtra.如果传递类的话,记得类实现Serializable接口 Intent intent = new Intent(Firs ...
- 【转载】IDEA:放置型塔防备忘录
下周开始做原型了,我需要再次细细的整理一遍设计思路,确保每一个设计都能为了我所追求的玩家体验添砖加瓦,而不是互相打架.同时本文还能提供最原始的VISION,待到将来开发万一陷入泥淖,翻出此文来可以起到 ...
- ABP官方文档翻译 2.1 依赖注入
依赖注入 什么是依赖注入 传统方式的问题 解决方案 构造函数注入模式 属性注入模式 依赖注入框架 ABP依赖注入基础设施 注册依赖注入 传统注册 帮助接口 自定义/直接注册 使用IocManager ...
- CF1137F Matches Are Not a Child's Play(LCT思维题)
题目 CF1137F 很有意思的题目 做法 直接考虑带修改的做法,上一次最大值为u,这次修改v,则最大值为v了 我们发现:\(u-v\)这条链会留到最后,序列里的其他元素相对位置不变,这条链会\(u\ ...
- 20145314郑凯杰 《Java程序设计》实验三 敏捷开发与XP实践实验报告
20145314郑凯杰 <Java程序设计>实验二 实验报告 实验要求 完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用 ...
- 2017杭电ACM集训队单人排位赛 - 6
2017杭电ACM集训队单人排位赛 - 6 排名 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 59 1 X X 1 1 X X 0 1 ...
- linux 块设备-整理(一)
1. 基本概念: linux设备驱动开发详解(宋宝华): 字符设备与块设备 I/O 操作的不同如下. (1)块设备只能以块为单位接受输入和返回输出,而字符设备则以字节为单位. 大多数设备是字符设备,因 ...
- linux-android(任务处理)
1.开辟任务内存 2.设置每个任务优先级 ,,
- cogs 341:[NOI2005] 聪聪与可可
★★ 输入文件:cchkk.in 输出文件:cchkk.out 简单对比 时间限制:1 s 内存限制:256 MB [问题描述] 在一个魔法森林里,住着一只聪明的小猫聪聪和一只可爱的小 ...
- TeeChart.Direct2D.dll的使用
这个dll本身依赖于第三方的控件,SlimDX ,可以从 http://slimdx.org/ 下载. .net4.0的版本区分x86和x64 帧数的概念 我们通常说帧数,简单地说,就是在1秒钟时间 ...