我必须为我的新程序开发一个UI,我想播放一个动画壁纸(mp4(作为我的背景。有人知道我该怎么做吗?
我试着用qvideowidget和qmediaplayer来解决这个问题,但如果我这样做,我就不能在视频上插入按钮或类似的东西,这样视频就会成为我的背景。
随后,我将视频转换为单个图像,并尝试在每次迭代时刷新qlabel的像素图,但我的程序崩溃了,所以这也不起作用。
使用OpenCV,您可以获得您想要的东西。
启动计时器并在任何时间点获取像素图。
重新实现QWidget的paintEvent((函数。
例如。。。
VideoCapture m_capture ;
m_capture.open(videoFilePath.toStdString()) ;
void QWidget::playMovie()
{
m_timer.start(30,this) ;
m_StartTime = QTime::currentTime() ;
}
QWidget::paintEvent(QPaintEvent* evemt)
{
QPainter painter(this) ;
painter.drawPixmap( 0, 0, m_snapshot.scaled(width(),height()) ;
}
QWidget::timerEvent(QTimerEvent* event)
{
if( event->timerId() != m_timer.timerId() ) return ;
int elapsed = m_StartTime.msecsTo(QTime::currentTime()) ;
if( m_capture.isOpened() )
{
m_capture.set(CV_CAP_PROP_POS_MSEC,elapsed ) ;
cv::Mat img ;
m_capture.read(img) ;
cvtColor(img , img ,CV_BGR2RGB);
QImage dest((const uchar *) img.data, img.cols, img.rows, img.step,
QImage::Format_RGB888);
dest.bits();
m_snapshot = QPixmap::fromImage(dest) ;
repaint() ;
}
}