用Qt加载Flash

来源:互联网 发布:网络之间连接的桥梁 编辑:程序博客网 时间:2024/06/14 20:25

今日工作中需要处理用Qt嵌入Flash的做法,特此记录下来,有兴趣可以一起研究研究

Qt嵌入Flash的方法:

原理:使用QAxWidget  将Flash文件作为一个插件 加载到你的程序中来。然后通过QAxWidget的dynamicCall方法调用Flash的方法就可以了。


方法:

1. 新建Qt工程,在pro文件中引入axcontainer模块   greaterThan(QT_MAJOR_VERSION, 4): QT += widgets axcontainer


2.       a 在程序中创建一个QAxWidget, 对象,并进行注册。 b 通过QAxWidget的dynamicCall加载Flash

    //QAxWidget *flash;    flash = new QAxWidget(0,0);    flash->resize(500,300); //设置控件的大小    flash->setControl(QString::fromUtf8("{d27cdb6e-ae6d-11cf-96b8-444553540000}")); //注册控件    //链接QAxWidget的信号 主要是错误处理    connect(flash,SIGNAL(FSCommand(QString,QString)),this,SLOT(flashAction(QString,QString)));    connect(flash, SIGNAL(exception(int,QString,QString,QString)), this, SLOT(error(int,QString,QString,QString)));    //加载SrcText.swf文件    flash->dynamicCall("LoadMovie(long,string)",0,"D:/Demo/flashTest/bin/SrcTest.swf"); //调用方法    QString str2 = flash->dynamicCall("TotalFrames" ).toString();//获得属性    flash->dynamicCall("FrameNum" , 200);//设置属性    flash->show();

注:setControl中的GUID不可改变。这个就是加载视频文件的GUID


3. 在Qt中调用Flash的函数

同样也是通过dynamicCall调用Flash的函数并可以传入参数。这里要介绍一下Flash提供的外部调用内部函数的方法CallFunction,

就是这个函数可以调用Flash写好的函数,他的参数是一个xml并且必须得是xml,感觉这个传参的方法不太好。。。

这个xml的格式为:

"<invoke name=\"getSteam\" returntype=\"xml\">     <arguments><string>    argument1        </string><string>    argument2         </string></arguments></invoke>"

上例子吧:

    flash->dynamicCall("CallFunction(string)",<span style="font-family: Arial, Helvetica, sans-serif;">"<invoke name=\"getSteam\" returntype=\"xml\"> </span><span style="font-family: Arial, Helvetica, sans-serif;"><arguments><string> argument1</span><span style="font-family: Arial, Helvetica, sans-serif;"></string></arguments></invoke>"</span>);

这样就可以调用Flash中的方法了。

注:1 在调用Flash的函数的时候 不可在加载完Flash之后立马调用,因为刚加载完Flash不一定Flash就new出来了,

           所以得等Flash初始化完全之后再调用。可以放到定时器中调用

2 xml格式注意编码问题。遇到调用不成功的时候编码多换换多试试。我就在这一步被坑过


1 0
原创粉丝点击