QT 中加载 Flash

为了在QT中加载Flash,这几天搞得头很大 。其实说来也简单,人家Flash不支持64位,所以,你的代码也只能是32位的。

加载 Flash当然需要 webkit 了,我就在 UI 上放了一个 webView。

以下代码让 webView 支持 plugin。

    QWebSettings *settings = ui->webView->settings();
    settings->setAttribute(QWebSettings::PluginsEnabled, true);

或者直接设成全局的也行:

    QWebSettings *websetting= QWebSettings::globalSettings();
    websetting->setAttribute(QWebSettings::JavascriptEnabled,true);
    websetting->setAttribute(QWebSettings::PluginsEnabled,true);

加载 Flash 就简单了,其实就一行,可怜我在64位的环境下折腾了半天:

ui->webView->load(QUrl("http://blah.swf"));

我要加载的 Flash 是带参数的,据说可以这样用:

ui->webView->load(QUrl("http://blah.swf?a=b&c=d"));

优雅起见,还可以使用 FlashVars,因此写了一个JS:

var t = 'http://'+url+'
';

document.write(t);

在QT中就这样用(通过JS设置FlashVars):

    QFile file;
    file.setFileName(":/resources/loadflash.js");
    file.open(QIODevice::ReadOnly);
    QString js = file.readAll();
    file.close();

    QString js1 = "var url='http://blah.swf'; var vars='a=b&c=d';" + js
    ui->webView->page()->mainFrame()->evaluateJavaScript(js1);

这种方法不是万能的。我就用同样的代码加载两个不同的Flash,一个成功一个不成功。调起来那个累啊。最后猜想可能是那个有问题的Flash中不认识这样的参数,抑或是跨域?还好,还有其它的办法:

先在 webView 中加载一个空的 Flash ,或一个只包含空的Flash的HTML,然后,也是使用JS控制加载:

QWebFrame *frame = ui->webView->page()->mainFrame();
QWebElement e = frame->findFirstElement("embed");
e.evaluateJavaScript("this.FlashVars='a=b&c=d';"
    "this.LoadMovie(0, 'http://blah.swf');");

笔记备忘。

Update:

有位大师说,一般搞了N久才解决的问题,都是小问题 ….

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt,我们可以使用QThread类来在一个独立的线程加载图片。首先,我们需要创建一个继承自QThread的自定义线程类,在该类重写run()方法。 在这个自定义线程类的run()方法,我们可以使用QImage类来读取图片文件。通过调用QImage的load()方法,我们可以加载图片并将其保存到一个QImage对象。 接下来,我们可以通过信号槽机制将加载完成的图片发送给主线程。我们可以在自定义线程类定义一个信号,例如loadImageCompleted(QImage),用于在加载完成后发出。 在主线程,我们可以创建一个实例化的自定义线程对象,并使用start()方法启动线程。然后,我们通过连接自定义线程对象的loadImageCompleted信号与主线程的一个槽函数,来接收加载完成的图片。 具体实现步骤如下: 1. 创建一个自定义线程类,继承自QThread。 2. 在自定义线程类重写run()方法,在其使用QImage的load()方法加载图片。 3. 定义一个信号,用于在加载完成后发出。 4. 在主线程创建自定义线程对象,并使用start()方法启动线程。 5. 使用connect()函数将自定义线程对象的信号与主线程的槽函数连接起来。 6. 在主线程的槽函数接收加载完成的图片,并进行相关处理。 这样,我们就可以在一个独立的线程加载图片,并将加载完成的图片传递给主线程进行后续处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值