實(shí)現(xiàn)QT與Flash交互操作
要實(shí)現(xiàn)QT與Flash交互操作,人家Flash不支持64位,所以,你的代碼也只能是32位的。
首先是QT調(diào)用Flash中的函數(shù):
QT中有一個(gè)控件叫QAxWidget,加載一個(gè).swf文件代碼如下:
- QAxWidget flash(this,NULL);
- flash.setControl(QString::fromUtf8("{d27cdb6e-ae6d-11cf-96b8-444553540000}"));
- flash.dynamicCall("LoadMovie(long,string)",0,”E:// First.swf ”);
現(xiàn)在是如何調(diào)用Flash中方法的問(wèn)題,首先要用Flash中的ExternalInterface.addCall方法來(lái)添加與外界交互的接入點(diǎn):
- ExternalInterface.addCallback("drawCircleExternal",drawCircle);
然后是如何在QT中調(diào)用這個(gè)函數(shù),在我的AS3代碼中,drawCircle需要一個(gè)int 型的參數(shù),所以調(diào)用代碼如下:
- QString str;
- QTextStream(&str)<<""
- <<""
- <<""<<<""
- <<""
- <<"";
- flash.dynamicCall("CallFunction(string)",str);
其中returntype是必須是xml,而且drawCircle的返回值無(wú)法得到,不知道為什么,不過(guò)這也不是很重要。
現(xiàn)在是如何在AS3 中調(diào)用C++的問(wèn)題,這仍然是通過(guò)AS3中的ExternalInterface這個(gè)類(lèi)中的call方法來(lái)實(shí)現(xiàn)。
AS3的代碼如下:
- ExternalInterface.call("calcu","bbcc");
其中calcu是外部函數(shù)名,“bbcc”是參數(shù)。
當(dāng)在AS3中執(zhí)行這段代碼里,QAxWidget會(huì)產(chǎn)生個(gè)signal,形式如下
- FlashCall(QString)
而其中QString的內(nèi)容如下
- bbcc
因此,在QT中要通過(guò)AS3調(diào)用C++,必須寫(xiě)一個(gè)slot并將其與上述的signal聯(lián)系起來(lái),具體代碼如下:
- connect(&flash,SIGNAL(FlashCall(QString)),this,SLOT(calcu(const QString&)));
將具體要被調(diào)用的代碼放入calcu中即可,當(dāng)然這里slot名不一定要與AS3中的函數(shù)名一樣,可以隨意更改。
【編輯推薦】
解析 QT 靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)
交互設(shè)計(jì)領(lǐng)域的包豪斯運(yùn)動(dòng)