2014-05-21 2 views
2

Qt :: FramelessWindowHint 플래그가있는 QWidget 및 QVideoWidget 또는 QGraphicsVideoItem을 사용하여 Qt :: WA_TranslucentBackground attirbute에서 동영상을 재생하고 싶습니다. 그러나 비디오는 보이지 않습니다. 나는 소리 만 들린다. 문제가 무엇입니까?반투명 QWidget에서 비디오를 재생하는 방법은 무엇입니까?

편집 :

#include "videoplayer.h" 

#include <QtWidgets/QApplication> 
#include "qboxlayout.h" 
#include "qvideowidget.h" 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    QWidget *w = new QWidget; 
    w->setWindowFlags(Qt :: Window | Qt::FramelessWindowHint); 
    w->setAttribute(Qt::WA_TranslucentBackground, true); 
    w->setMinimumSize(300,200); 

    QVideoWidget *videoWidget = new QVideoWidget; 

    QBoxLayout *controlLayout = new QHBoxLayout; 
    controlLayout->setMargin(0); 
    controlLayout->addWidget(videoWidget); 
    w->setLayout(controlLayout); 

    QMediaPlayer mediaPlayer; 
    mediaPlayer.setVideoOutput(videoWidget); 
    mediaPlayer.setMedia(QUrl::fromLocalFile("C:/1.wmv")); 

    videoWidget->show(); 
    mediaPlayer.play(); 

    w->show(); 
    return app.exec(); 
} 
+0

코드를 붙여 넣을 수 있습니까? –

+0

질문은 내가 문제가있는 코드를 추가하여 편집합니다. 두 줄 w-> setWindowFlags (Qt :: Window | Qt :: FramelessWindowHint); w-> setAttribute (Qt :: WA_TranslucentBackground, true); 영화보기를 올바르게 제거하십시오. –

답변

2

우리는 WA_TranslucentBackground 플래그와 FramelessWindowHint 특성을 설정할 때 QVideoWidget의 QPainter가 QPainter :: CompositionMode_DestinationOver 모드로 전환되어 화면에 아무 것도 나타나지 않거나 그림자가 나타나지 않습니다. 이 경우에는 QPainter 페인터 (this)를 만든 후 사용자 정의 비디오 위젯과 paintEvent를 사용합니다. 추가 모드를 변경하려면

painter.setCompositionMode(QPainter::RasterOp_SourceAndNotDestination); or 
painter.setCompositionMode(QPainter::RasterOp_SourceAndDestination); 

을 추가하십시오.

1

내가 몇 시간 전에 VideoWidget 구현했습니다. 변경해야 할 것은 비디오 경로이며 FramelessWindowHint 플래그를 설정해야합니다.

소스 here을 찾을 수 있습니다.

+0

답변 해 주셔서 감사합니다. 귀하의 솔루션은 VideoWidget 클래스가 직접 표시 될 때만 정확합니다. 레이아웃에 위젯을 추가하면 비디오가 다시 보이지 않습니다. –

관련 문제