【问题标题】:QT widgets Video as background?QT 小部件 视频作为背景?
【发布时间】:2020-11-29 02:42:21
【问题描述】:

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

我尝试使用 qvideowidget 和 qmediaplayer 解决此问题,但如果我这样做,我无法在视频上插入按钮或类似内容,以便视频成为我的背景。

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

【问题讨论】:

    标签: c++ qt qt-designer qmediaplayer qvideowidget


    【解决方案1】:

    使用 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() ;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-04-25
      • 2014-12-17
      • 1970-01-01
      • 2016-02-26
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      • 1970-01-01
      • 2014-10-06
      相关资源
      最近更新 更多