在Qt中使用ActiveX控件

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

在Qt中使用ActiveX控件Qt的windows商业版本提供了ActiveQt这个framework,使用这个组件我们可以在Qt中使用ActiveX控件,并且也开发基于Qt的ActiveX控件。ActiveQt包含了两个组件QAxContainer和QAxServer。QAxContainer允许我们使用COM对象,并且可以将将ActiveX控件嵌入到Qt程序中去。QAxServer可以将我们写的Qt控件导出为COM对象或者是ActiveX控件。第一个例子我们来演示一下在Qt中使用shockwaveFlash这个ActiveX控件。#includeQApplication#includeQtGui#includeQAxWidgetintmain(intargc,char*argv[]){QApplicationa(argc,argv);QAxWidget*flash=newQAxWidget(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();returna.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,classID可以通过一些其它的编程工具获得(vc/Delphi/MicrosoftActiveXControlPad)。这时就会调用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);QStringtext=activeX-dynamicCall(Text).toString();5)通过dynamicCall调用COM对象的方法的时候需要提供完成的函数签名。activeX-dynamicCall(Navigate(constQString&),qt.nokia.com);

1 / 3
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功