0

我必须为我的新程序开发一个 UI,并且我想播放一个动画壁纸 (mp4) 作为我的背景。有人知道我该怎么做吗?

我尝试使用 qvideowidget 和 qmediaplayer 解决它,但如果我这样做,我将无法在视频上插入按钮等,以便视频成为我的背景。

随后,我将视频转换为单个图像,并尝试在每次迭代时刷新 qlabel 的像素图,但我的程序崩溃了,所以这也不起作用。

4

1 回答 1

0

使用 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() ;
    }
}
于 2020-08-10T09:31:35.017 回答