1. 获取下述QTAV源码文件中的.c和.h文件,复制到工程文件下
2. 在工程中添加进来
3. 代码实现
//初始化变量
m_preview=nullptr;
//定义变量与槽函数:
QtAV::AVPlayer *m_player;
QtAV::VideoPreviewWidget *m_preview;
void slotMoveSliderTime(int position);
void slotMoveSliderTime();
void slotonTimeSliderLeave();
void slotonTimeSliderHover(int,int);
//拖到进度条触发
QObject::connect(ui->hsliTimeSlide,SIGNAL(sliderMoved(int)),this, SLOT(slotMoveSliderTime(int)));
connect(ui->hsliTimeSlide, SIGNAL(sliderPressed()), SLOT(slotMoveSliderTime()));
connect(ui->hsliTimeSlide, SIGNAL(onLeave()), SLOT(slotonTimeSliderLeave()));
connect(ui->hsliTimeSlide, SIGNAL(onHover(int,int)), SLOT(slotonTimeSliderHover(int,int)));
void Widget::slotMoveSliderTime(int position)
{
m_player->setSeekType(QtAV::AccurateSeek);
m_player->seek((qint64)position);
if (!m_preview)
return;
m_preview->setTimestamp(position);
m_preview->preview();
m_preview->setWindowFlags(m_preview->windowFlags() |Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
m_preview->resize(200,140);
m_preview->show();
}
void Widget::slotMoveSliderTime()
{
this->slotMoveSliderTime(ui->hsliTimeSlide->value());
}
void Widget::slotonTimeSliderLeave()
{
if (!m_preview)
{
return;
}
if (m_preview->isVisible())
{
m_preview->close();
}
delete m_preview;
m_preview = NULL;
}
void Widget::slotonTimeSliderHover(int pos, int value)
{
QPoint gpos = mapToGlobal(ui->hsliTimeSlide->pos() + QPoint(pos, this->height()-ui->widControl->height()));
QToolTip::showText(gpos, QTime(0, 0, 0).addMSecs(value).toString(QString::fromLatin1("HH:mm:ss")));
if (!m_preview)
m_preview = new QtAV::VideoPreviewWidget();
m_preview->setFile(m_player->file());
m_preview->setTimestamp(value);
m_preview->preview();
const int w = 200;
const int h = 140;
m_preview->setWindowFlags(Qt::Tool |Qt::FramelessWindowHint|Qt::WindowStaysOnTopHint);
m_preview->resize(w, h);
m_preview->move(gpos - QPoint(w/2, h));
m_preview->show();
}