关于QT与Flash互操作

这几天在学习Action Script,在网上乱逛发现QT与flash互操作的可能性,试验了一把,居然成功了。

首先是QT调用Flash中的函数:

QT中有一个控件叫QAxWidget,加载一个.swf文件代码如下:

QAxWidget flash(this,NULL);
flash.setControl(QString::fromUtf8("{d27cdb6e-ae6d-11cf-96b8-444553540000}"));
flash.dynamicCall("LoadMovie(long,string)",0,”E:// First.swf ”);

现在是如何调用Flash中方法的问题,首先要用Flash中的ExternalInterface.addCall方法来添加与外界交互的接入点:

ExternalInterface.addCallback("drawCircleExternal",drawCircle); 

然后是如何在QT中调用这个函数,在我的AS3代码中,drawCircle需要一个int 型的参数,所以调用代码如下:

 

QString str;

QTextStream(&str)<<""


                         <<""

                         <<""<<<""

                         <<""

                         <<"";


flash.dynamicCall("CallFunction(string)",str);

其中returntype是必须是xml,而且drawCircle的返回值无法得到,不知道为什么,不过这也不是很重要。

现在是如何在AS3 中调用C++的问题,这仍然是通过AS3中的ExternalInterface这个类中的call方法来实现。

AS3的代码如下:

ExternalInterface.call("calcu","bbcc");

其中calcu是外部函数名,“bbcc”是参数。

当在AS3中执行这段代码里,QAxWidget会产生个signal,形式如下

FlashCall(QString)

而其中QString的内容如下


bbcc


因此,在QT中要通过AS3调用C++,必须写一个slot并将其与上述的signal联系起来,具体代码如下:

connect(&flash,SIGNAL(FlashCall(QString)),this,SLOT(calcu(const QString&)));

将具体要被调用的代码放入calcu中即可,当然这里slot名不一定要与AS3中的函数名一样,可以随意更改。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/liurenjie2008/archive/2010/03/29/5430183.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值