Qt Flash 播放

news/2024/11/9 10:01:18/

QQ背景层界面,最复杂的要数Flash播放了。

Qt自带有播放Flash的插件:QAxWidget,正常播放flash没有问题,当被响应层覆盖后,不刷新,会变成黑色。如下:

 

目前使用定时器播放图片模拟动画[PseudoFlashWidget],效果如下[每组40张照片,目前播放过快或有卡顿,可通过改变图片序列和定时器时间间隔来改进], 该方法不成熟,顾目前未加到资源文件中,通过目录读取,效果:

 

因此,之前的类图变更为:

 

期待Qt正统的Flash播放方法,现附上这两个类的实现:

FlashWidget:

#include "flashwidget.h"
#include <QPainter>
#include <QLabel>
#include <QMovie>
FlashWidget::FlashWidget(QString flashPath, QWidget *parent) :
BackgroundWidget(parent)
{
if(parent)
this->setFixedSize(parent->size());
this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
flash = new QAxWidget(parent);
flash->setFixedSize(this->size());
flash->show();
flash->setControl(QString::fromUtf8("{d27cdb6e-ae6d-11cf-96b8-444553540000}"));
flash->dynamicCall("LoadMovie(long,string)",0, flashPath);
//    flash->dynamicCall("WMode", "transparent");
timer = new QTimer;
connect(timer, &QTimer::timeout, this, &FlashWidget::update);
timer->start(1000);
}
void FlashWidget::update()
{
flash->update();
}
void FlashWidget::paintEvent(QPaintEvent *)
{
}


PseudoFlashWidget:

#include "pseudoflashwidget.h"
#include <Qpainter>
#include <QDir>
#include <iostream>
using namespace std;
PseudoFlashWidget::PseudoFlashWidget(const QString &dirPath, QWidget *parent) :
BackgroundWidget(parent)
{
QDir dir(dirPath);
if(!dir.exists())
{
cout << dirPath.toStdString() << " not exist."<<endl;
}
dir.setFilter(QDir::Files);
dir.setSorting(QDir::Name);
QFileInfoList list = dir.entryInfoList();
for (int i = 0; i < list.size(); ++i) {
QFileInfo fileInfo = list.at(i);
//cout << fileInfo.filePath().toStdString()<<endl;
pixmaps.push_back(QPixmap(fileInfo.filePath()));
}
if(parent)
this->setFixedSize(parent->size());
else
{
if(pixmaps.size() > 0)
this->setFixedSize(pixmaps[0].size());
}
texturePixmap = QPixmap(":/background/texture").copy(10, 5, 25, this->height());
index = 0;
timer = new QTimer();
connect(timer, &QTimer::timeout, this,  &PseudoFlashWidget::setNext);
timer->start(200);
}
void PseudoFlashWidget::paintEvent(QPaintEvent *)
{
QPainter painter(this);
painter.drawPixmap(this->rect(), pixmaps[index]);
painter.drawPixmap(this->rect(), texturePixmap);
}
void PseudoFlashWidget::setNext()
{
index++;
if(index >= pixmaps.size())
index = 0;
this->update();
}


 


http://www.ppmy.cn/news/637700.html

相关文章

Vue整合Rtmp流实现无Flash播放[flv+websocket篇]

小白心路历程篇&#xff0c;如有错误欢迎指出&#xff0c;感谢各位大佬 本篇包括以下内容&#xff1a; ①采用node的第三方流媒体库Node-Media-Server搭建流媒体服务器 ②使用vueflvjswebsocket实现页面无flash播放视频流 预备知识&#xff1a; node&#xff08;用于搭建流…

flash swf文件 网页播放功能方案实现

1、ruffle 可以支持先网页播放swf文件但是actionscrip3支持不太好&#xff0c;但看最近还是有更新的并且也有as3支持的计划&#xff0c;期待后续 GitHub - ruffle-rs/ruffle: A Flash Player emulator written in Rust 2、WAFlash https://github.com/vidkidz/vidkidz.github…

如何在flash中实现播放控制?

经常看到一些作品中有播放按钮&#xff08;即点击该按钮动画才能继续播放&#xff09;&#xff0c;类似这样的效果是如何实现的&#xff1f; 比如说这这样的播放按钮&#xff1a; 一、播放按钮的实例讲解 播放按钮的逻辑就是&#xff1a; 动画播放到这里停止&#xff0c;等待…

Vue整合Rtmp流实现无Flash播放[hls篇]

小白心路历程篇&#xff0c;如有错误欢迎指出&#xff0c;感谢各位大佬 本篇包括以下内容&#xff1a; ①采用nginx搭建流媒体服务器&#xff0c;利用ffmpeg工具实现推流和转码工作。 ②使用vue原生hls.js来实现无flash播放m3u8直播流 预备知识&#xff1a; linux(操作系统…

网页通过Flash播放视频

众所周知要想在网页上播放视频有很多种方式,比如通过H5里面的Video标签,选择对应的参数,可以帮你自动加很多功能,比如暂停,播放,快进快退,调节音量,全屏播放,下载等等.但是这种方式也有很多缺点,就是只支持H.264编码格式的mp4视频文件,导致其他格式的视频要想播放还需转码.而且…

网页中播放Flash

作者 佚名 文章来源 互联网 地址 http://www.eqing.com.cn/Article/Print.asp?ArticleID1543介绍 我们要在网页中正常显示flash内容&#xff0c;那么页面中必须要有指定flash路径的标签。也就是OBJECT和EMBED标签。OBJECT标签是用于windows平台的IE浏览器的&#xff0c;而…

网页播放Flash视频尝试的三种方式

本身不是写HTML代码的&#xff0c;但老板突然让解决播放器适配所有浏览器的问题&#xff0c;过程有点难受。 播放视频最开始是使用H5的video标签播放mp4视频&#xff0c;但是不支持IE 9以下的浏览器&#xff0c;找到的解决方案是html5media&#xff0c;但是在不支持video标签的…

SpringBoot + Vue前后端分离项目实战 || 五:用户管理功能后续

系列文章&#xff1a; SpringBoot Vue前后端分离项目实战 || 一&#xff1a;Vue前端设计 SpringBoot Vue前后端分离项目实战 || 二&#xff1a;Spring Boot后端与数据库连接 SpringBoot Vue前后端分离项目实战 || 三&#xff1a;Spring Boot后端与Vue前端连接 SpringBoot V…