QT和flex swf进行相互调用和交互
来源:互联网 发布:中国移动彩铃diy软件 编辑:程序博客网 时间:2024/06/05 10:37
- 在项目文件xxxx.pro中加入 CONFIG += qaxcontainer,播放Flash动画需要引入QAxWidget类,库文件有QAxContainer.lib,QAxServer.lib等
- 在窗口中使用如下代码,嵌入并播放flash
- //中文编码设置
- QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
- //
- QString applicationPath =QCoreApplication::applicationDirPath();
- swf = new QAxWidget(0,0);
- //这个show的方法要放在这里,否则会产生初始化swf的时候,大小有问题的情况
- swf->show();
- //
- swf->setControl(QString::fromUtf8("{d27cdb6e-ae6d-11cf-96b8-444553540000}"));
- swf->dynamicCall("LoadMovie(int,QString)",0,applicationPath+"/Resources/Main.swf");
- swf->dynamicCall("Play");
- 让QT的程序调用swf中的方法:
- 在qt的主窗口中定义一个按钮。按钮的click事件如下:
- void MainWindow::on_pushButton_clicked()
- {
- //QMessageBox::warning(NULL, "warning","on click", QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
- QString funName="callWithEXE";
- QString arg = QObject::tr("哦哟!我是QT传给flex的内容");
- QString callMethod ="<invoke name=/"" + funName + "/" returntype=/"xml/"><arguments><string>" + arg + "</string></arguments></invoke>";
- swf->dynamicCall("CallFunction(string)",callMethod);
- }
- 在flex的as文件中定义接口程序如下:
- private function init():void{
- //这是外部接口,让C#可以调用
- ExternalInterface.addCallback("callWithEXE",callWithEXE);
- }
- 在flex的as文件中定义程序的实现方法
- public function callWithEXE(str:String):void{
- Alert.show(str,"内容显示的是");
- }
- 上面的代码段,完成了如此场景:在qt的主窗口有个按钮,点击按钮后,在flex里面显示出一个alert窗口,内容为:哦哟,我是QT传递给flex的内容
- 让swf中调用QT中的方法:
- 在flex中定义一个按钮。访问QT中的方法,并获得一个返回值
- protected function button1_clickHandler(event:MouseEvent):void
- {
- // TODO Auto-generated method stub
- if( ExternalInterface.available){
- //Alert.show("ExternalInterface 可用。可以调用外壳方法")
- //调用外部程序SayHello方法,并传入方法参数"Hunk",输出方法返回值result
- var strReturn:String = ExternalInterface.call("SayHello", "Hunk","roamer");
- Alert.show(strReturn);
- }else{
- Alert.show("ExternalInterface 不可用。")
- }
- }
- 在QT中定义一个slot,和来自flex中的方法产生signal进行连接。由于as3运行时候,在flex中的ExternalInterface.call会产生一个signal,形式是FlashCall(QString),其中QString是flex方法里面传来的参数"Hunk","roamer".
- 定义一个slot,在头文件中定义。
- public slots:void SayHello(QString message);
- 在QT的代码中连接一个slot
- //链接一个槽,使得swf中调用后,使用这个槽
- connect(swf,SIGNAL(FlashCall(QString)),this,SLOT(SayHello(const QString&)));
- 实现slot中的方法
- void MainWindow::SayHello(QString message)
- {
- QMessageBox::warning(NULL,QObject::tr( "我是swf传递过来的内容"),message, QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes);
- QString rtnString =QObject::tr("<string>哦也!我是qt返回的内容</string>");
- swf->dynamicCall("SetReturnValue(string)",rtnString);
- }
注意:flex中传递过来的内容是一个包含方法名和参数列表的xml。同样:如果要让QT给flex代码返回值。返回值也必须是xml字符串("<string>哦也!我是qt返回的内容</string>";)。否则不能获得
- 在flex中定义一个按钮。访问QT中的方法,并获得一个返回值
flash and gif 的播放
1 #include <QtGui> 2 #include <QtGui/QApplication> 3 #include <QTextCodec> 4 #include <QWidget> 5 #include <ActiveQt/QAxWidget> 6 #include <QTime> 7 8 void gifplay(QLabel *label) 9 {10 label->show();11 }12 13 void gifclose(QLabel *label)14 {15 label->close();16 }17 18 void flashplay(QAxWidget *flash)19 {20 flash->show();21 }22 23 void flashclose(QAxWidget *flash)24 {25 flash->close();26 }27 28 int main(int argc, char *argv[])29 {30 QApplication a(argc, argv);31 32 QTextCodec *codec = QTextCodec::codecForName("GB2312"); //文本为GB2312编码33 QTextCodec::setCodecForLocale(codec); //设置本地编码34 QTextCodec::setCodecForCStrings(codec); //设置字符串编码35 QTextCodec::setCodecForTr(codec);36 37 QAxWidget *flash = new QAxWidget(0,0); //QAxWidget使用的是ActiveX插件38 flash->resize(800,600); //设置该控件的初始大小39 flash->setControl(QString::fromUtf8("{d27cdb6e-ae6d-11cf-96b8-444553540000}")); //设定控制器40 flash->dynamicCall("LoadMovie(long,string)",0,"D:\\flash1.swf"); //41 flash->setWindowFlags(Qt::FramelessWindowHint); //去除边框42 flashplay(flash);43 QTime t;44 t.start();45 while(t.elapsed()<5000)46 {47 QApplication::processEvents();48 }49 flashclose(flash);50 51 /*52 QMovie *movie; 53 movie = new QMovie("D:\\gif1.gif"); 54 QLabel *label=new QLabel ("", 0);55 label->setGeometry( 300, 300, 500, 500 ); 56 label->setMovie(movie); 57 label->setScaledContents(true); 58 movie->start(); 59 gifplay(label);60 t.start();61 while(t.elapsed()<5000)62 {63 QApplication::processEvents();64 }65 gifclose(label); 66 */67 68 return a.exec();69 }
0 0
- QT和flex swf进行相互调用和交互
- QT和flex swf进行相互调用和交互
- flex 和swf互相调用
- Flex 和AS3 SWF交互(不需要Localconnection)
- Flex和js相互调用
- Flex和js相互调用
- Flex和J2EE进行交互-
- Flex 和AS3 SWF交互(不需要Localconnection)
- Qt和JavaScript相互调用
- Javascript和AS相互交互调用
- flex 和js 函数的相互调用
- JS和FLEX的相互调用
- flex与html交互和js调用
- flex与html交互和js调用
- flex与html交互和js调用
- flex与html交互和js调用
- flex和嵌入的swf
- jsp嵌入flex swf 和flex调用js方法
- 好奇: jvm划分的内存感觉挺小的,够程序用吗?
- Unity手动添加材质和着色器
- JitWarmUp更名为JWarmup正式内置为AJDK模块。
- 公司--As Imp的写法
- curl 小记
- QT和flex swf进行相互调用和交互
- listview滑动时 radiogroup状态保留的问题
- 用过的比较好的一些前端插件
- 安装SqlServer数据库查看软件NavicatSS
- jav学习之————IO流
- Axure RP 7.0初学篇01-------安装
- Contabs日志中报错:No MTA installed, discarding output
- 【干货分享】流程DEMO-离职流程
- ant脚本笔记