要实现QT与Flash交互操作,人家Flash不支持64位,所以,你的代码也只能是32位的。
首先是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中的函数名一样,可以随意更改。
【编辑推荐】