Виджеты QT Видео в качестве фона?

Мне нужно разработать пользовательский интерфейс для моей новой программы, и я хочу использовать анимированные обои (mp4) в качестве фона. Кто-нибудь знает, как я могу это сделать?

Я попытался решить эту проблему с помощью qvideowidget и qmediaplayer, но если я сделаю это таким образом, я не смогу вставлять кнопки или что-то подобное поверх видео, чтобы видео было моим фоном.

Впоследствии я преобразовал свое видео в отдельные изображения и пытался обновлять растровое изображение qlabel на каждой итерации, но моя программа вылетела из строя, так что это тоже не сработало.


person Leon Hausmann    schedule 09.08.2020    source источник


Ответы (1)


С OpenCV вы можете получить то, что хотите.

Запустите таймер и получайте растровое изображение, когда часы отсчитывают время.

Реализуйте повторно функцию paintEvent () QWidget.

Например...

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() ;
    }
}
person Armand Kupcis    schedule 10.08.2020