`
buliedian
  • 浏览: 1254514 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

在Qt中使用ActiveX控件

阅读更多

版权声明

本文为原创作品,请尊重作者的劳动成果。转载必须保持文章完整性,并以超链接形式注明原始作者“tingsking18”和主站点地址,方便其他朋友提问和指正。

Qt中使用ActiveX控件

Qtwindows商业版本提供了ActiveQt这个framework,使用这个组件我们可以在Qt中使用ActiveX控件,并且也开发基于QtActiveX控件。ActiveQt包含了两个组件QAxContainerQAxServer

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控件、QAxBaseQAxObjectQAxWidget的父类,它实现了封装COM的核心函数。

这三个类的关系如下:

2. 然后通过setControl设置ShockwaveFlash这个ActiveX控件的class_idclass ID可以通过一些其它的编程工具获得(vc/Delphi/Microsoft ActiveX Control Pad)。这时就会调用CoCreateInstance创建ActiveX控件的实例。这时这个ActiveX控件的所有的属性、方法、事件将通过QAxWidget转换为Qtpropertiessignalsslots

通过调用QAxWidgetproperty()方法和SetProperty方法可以获取和设置ActiveX控件的属性。

既然可以调用ActiveX控件的方法属性,当然也就需要有COM中的数据类型和Qt中的使用的数据类型的转换了。下面就是COM中数据类型和Qt中的数据类型对应的表格:

Qt中数据类型与COM中的数据类型对照关系

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控件开发的视频播放器项目源码.zip

    在本项目中,"qt使用activex控件开发的视频播放器项目源码",开发者利用QT框架结合ActiveX技术创建了一个能够播放多种视频格式(如MP4和MPEG)的播放器。ActiveX是一种微软开发的技术,允许在不同应用程序之间共享...

    Qt生成ActiveX控件

    在Qt中,通过使用Qt的ActiveX模块,我们可以把Qt的QWidgets或QML部件封装成ActiveX控件,使得这些控件可以在支持ActiveX的环境中,如Internet Explorer浏览器、Visual Basic、Visual C++等应用中使用。 首先,要...

    Qt ActiveX 开发帮助文档

    2. **Excel应用的ActiveX接口**:这部分文档详细介绍了如何在Qt中使用ActiveX控件与Excel交互。例如,`ExcelApplication_ActiveX_Help.html`可能包含了如何创建Excel实例、打开工作簿、操作工作表和单元格的方法。`...

    Qt中使用QAxObject操作Excel文件插入散点图添加趋势线

    Qt的windows商业版本提供了ActiveQt这个framework,使用这个组件我们可以在Qt中使用ActiveX控件。 这个代码提供了基本的Excel操作范例:打开 关闭 读写 另外,还实现了如何在Excel中插入散点图图表并添加趋势线,...

    qt导出activex接口

    1. **Qt与ActiveX集成**:Qt提供了对ActiveX的支持,允许开发者在Qt应用中使用ActiveX控件,同时也可创建Qt应用程序作为ActiveX服务器,使得非Qt环境的应用可以调用其功能。 2. **QAxFactory**:这是Qt用于创建...

    Qt 开发activex控件的指纹采集器开发

    在本文中,我们将深入探讨如何使用Qt框架进行ActiveX控件的开发,特别是针对指纹采集器的集成。Qt是一个跨平台的应用程序开发框架,广泛应用于桌面、移动和嵌入式设备。而ActiveX控件是一种在Windows环境中创建可...

    Qt中ActiveX控件开发程序示例

    Qt框架下的ActiveX控件的开发的资料较少,该示例程序展示了Qt中OpenGL环境下开发ActiveX控件。开发环境是VS2008+Qt4.6.2+OpenGL,需要配置环境,点开程序可以编译运行;生成的控件名称是GLBox。欢迎大家交流,谢谢~

    如何在ActiveX控件中显示对话框界面

    本篇将详细介绍如何在ActiveX控件中显示对话框界面,以提供用户交互的功能。 首先,了解ActiveX控件的基本概念。ActiveX是微软提出的一种组件对象模型(COM),它通过接口和类库来定义可执行代码。这些组件可以是...

    ActiveX控件测试容器

    从VC的示例代码中编译的ActiveX控件测试容器,可以很方便的测试开发中的ActiveX控件。 以前这个工具是作为VC的一个实用工具一起发布的,现在VC提供了代码,直接编译就行了。

    Qt ActiveX测试代码

    这篇博客文章(http://blog.csdn.net/csxiaoshui/article/details/48000885)中提供的“Qt ActiveX测试代码”是一个实例,展示了如何在Qt应用程序中使用ActiveX控件。虽然代码可能较为随意,但它是理解Qt与ActiveX...

    QT封装ACTIVEX,支持外部传入参数传入函数,mfc和c#(不熟,没做传入参数)的例子

    2. **外部传入数值**:在QT封装的ActiveX控件中,可以通过信号和槽机制从QT应用向ActiveX控件传递数据。例如,可以通过定义一个信号,当信号被触发时,传入需要的数值,然后在ActiveX控件内部的槽函数中处理这些数值...

    Qt开发ocx例子

    在Visual Studio 2010中,我们可以创建和管理这些控件,而Qt 4.8.0则提供了与ActiveX技术集成的能力,使得开发者能够在Qt应用程序中利用ActiveX控件的特性。 首先,我们要了解在Qt中创建ActiveX控件的基本步骤。这...

    使用C#开发ActiveX控件

    最近弄了一个在Qt中使用C#控件的功能,使用的方法是通过C#生产ActiveX控件,在Qt中使用该ActiveX控件。本文这里简单的介绍一下如何用C#生成ActiveX控件。 1. 建立WinForm的UserControl工程,在控件的属性页中选择”...

    Qt中OpenGL环境下ActiveX控件程序

    Qt框架下的ActiveX的开发的资料较少,该示例程序展示了Qt中OpenGL环境下开发ActiveX控件。开发环境是VS2008+Qt4.6.2+OpenGL,需要配置环境,点开程序可以编译运行;生成的空间名称是GLBox。欢迎大家交流,谢谢~

    网页嵌入exe, Qt开发activex

    4. **实现业务逻辑**:在Qt类中实现ActiveX控件的具体功能。这可能涉及到与exe程序的交互,例如通过进程通信或者直接调用exe的入口点。 5. **注册控件**:完成编码后,需要在Windows上注册ActiveX控件,使其能在IE...

    Qt_ActiveX开发、调用、调试(带附件).docx

    ActiveX控件是一种用于Windows平台上的软件组件,可以在多种应用程序之间共享功能,尤其是在Web浏览器中的应用非常广泛。通过Qt ActiveX,开发者可以利用Qt库的强大功能来开发跨平台的ActiveX控件。 #### 二、创建...

    C++实现的中国象棋控件,包括中国象棋 MFC 扩展库,中国象棋 activex 控件 ,中国象棋Qt插件,人工智能引擎等

    C++实现的中国象棋控件,包括中国象棋 MFC 扩展库,中国象棋 activex 控件 ,中国象棋Qt插件,人工智能引擎等 功能 控件 中国象棋库 中国象棋基本规则 棋局保存和复盘 中国象棋 MFC 扩展动态库 中国象棋 ...

    VS C#调用QT Active控件demo

    在这个场景下,"VS C#调用QT Active控件demo"提供了一个实例,展示了如何在Visual Studio(VS)的C#环境中调用并集成Qt的ActiveX控件。这个教程或者项目演示了C#与Qt之间的交互,使得开发者可以利用Qt丰富的图形界面...

    C++调用微软actieX控件实现远程桌面实例

    总结来说,通过C++调用微软的ActiveX控件实现远程桌面功能,需要掌握COM和ActiveX的基本概念,以及如何在C++环境中使用ATL库进行组件交互。"TestMfcAtlDebug"项目提供了具体的实现细节,可以通过阅读代码和博客文章...

Global site tag (gtag.js) - Google Analytics