0

複数のビデオ(メディア)ファイルを再生し、各ファイルでユーザーが変更できるようにするアプリケーションを設計しようとしています(たとえば、ビデオのスケーリング、回転、反転など)。私は勉強することから始めましたPhononが、しばらく調べた後、> =でサポートされなくなった(またはサポートが疑わしい)ことを読みましたQt5。それで私は戻って、今私はqtmultimediaを見ています- QMediaPlayer。私はc#-WPFのバックグラウンドから来ましたが、Qt-C++で以前にいくつかの作業を行いました。しかし、今回は、どのウィジェットを使用しなければならないかについて行き詰まり、混乱しています。、およびQMediaPlayerにその出力(ビデオ)を表示できます。回転などの機能が必要なので、QGraphicsScene/Viewを組み込む必要があると思います。QVideoWidgetQGraphicsVideoItemQAbstractVideoSurface

<1>では、アプローチはどうあるべきでしょうか?私はこれを行いました:使用QVideoWidget->これをQGraphicsProxyWidgetvia setWidget()に追加しました(ただし、setWidget()はQWidget*を取り、Qt Assistantで見られるようにQVideoWidget派生しQWidgetていません-なぜこれが許可されているのですか?)-> via ()->にこれQGraphicProxyWidgetを追加しました構築中にこれを追加しました-> via ()に追加しました。これでいいですか?いつ使用するか?QGraphicsSceneaddItemQGraphicsSceneQGraphicsViewQGraphicsViewQMainWindowsetCentralWidgetQGraphicsVideoItemQAbstractVideoSurface

<2>QVideoWidget次のように複数を追加すると、ビデオやQVideoWidgetそれ自体が表示されません(区別するためにペイントしました)。私は何が間違っているのですか?(ただし、音声出力があります):

    QVideoWidget *pVideoWidget1 = new QVideoWidget(0);
    pVideoWidget1->setPalette(QPalette(QColor(255,0,0),QColor(0,255,0)));
    QVideoWidget *pVideoWidget2 = new QVideoWidget(0);
    pVideoWidget2->setPalette(QPalette(QColor(255,0,0),QColor(0,0,255)));

    m_pMediaPlayer1 = new QMediaPlayer(this);
    m_pMediaPlayer2 = new QMediaPlayer(this);
    m_pMediaPlayer1->setVideoOutput(pVideoWidget1);
    m_pMediaPlayer2->setVideoOutput(pVideoWidget2);

    m_pCustomGraphicsProxy1 = new CustomGraphicsProxy(0); //this is just a class derived from QGraphicsProxyWidget to implement drag and drop of videos
    m_pCustomGraphicsProxy2 = new CustomGraphicsProxy(0);
    m_pCustomGraphicsProxy1->setWidget(pVideoWidget1);
    m_pCustomGraphicsProxy2->setWidget(pVideoWidget2);

    QGraphicsScene *pGraphicsScene = new QGraphicsScene(this);
    QGraphicsLinearLayout *pGraphicsLinearLayout = new QGraphicsLinearLayout;

    CustomGraphicsProxy* button = new CustomGraphicsProxy(0);
    button->setWidget(new QPushButton); //this i can see
    CustomGraphicsProxy* button1 = new CustomGraphicsProxy(0);
    button1->setWidget(new QPushButton); //this i can see too

    pGraphicsLinearLayout->addItem(button);
    pGraphicsLinearLayout->addItem(m_pCustomGraphicsProxy1); //can't see
    pGraphicsLinearLayout->addItem(m_pCustomGraphicsProxy2); //can't see
    pGraphicsLinearLayout->addItem(button1);


    CustomGraphicsProxy *temp = new CustomGraphicsProxy(0);
    temp->setLayout(pGraphicsLinearLayout);
    pGraphicsScene->addItem(temp);
    temp->show();

    m_pGraphicsView = new QGraphicsView(pGraphicsScene, this);

    setCentralWidget(m_pGraphicsView);

    QObject::connect(m_pCustomGraphicsProxy1, SIGNAL(sigNewFileDragDropped()), this, SLOT(sloPlayOnWindow1()));
    QObject::connect(m_pCustomGraphicsProxy2, SIGNAL(sigNewFileDragDropped()), this, SLOT(sloPlayOnWindow2()));

    //just for testing - this gives only audio no video can be seen
    m_pMediaPlayer1->setMedia(QUrl::fromLocalFile("d:/z.avi"));
    m_pMediaPlayer1->play();

<3>これをさらに研究する前に、前述のようにビデオを操作するためにQtで適切なツールを選択していますか、それとも何か他のことをする必要がありますか?

4

1 に答える 1

0

プレーヤー用に独自のカスタム ウィジェットを作成していると思います。その場合、デザイナで QWidget を使用してプロモートします。それはうまくいきます。方法のリンクは次のとおりです。

于 2013-08-23T06:38:12.837 に答える