如何使用qt在给定时间在新窗口中显示视频帧

问题描述 投票:0回答:1

这是我的代码。在此代码中,视频显示在主窗口中,而不是新窗口中。我想在给定的时间在90秒内在新窗口中显示视频帧]

 void MainWindow::on_pushButton_2_clicked()
{
    if(ui->radioButton_2->isChecked()) {

    QString fileName = QFileDialog::getOpenFileName(this,
              tr("Open Video"), "G://", "All files (*.*);Video files(*.*)");
     ui->lineEdit->setText(fileName);


         player = new QMediaPlayer;
            vw=new QVideoWidget;
          player->setVideoOutput(vw) ;

           player->setMedia(QUrl::fromLocalFile(fileName));
           QDialog *dialog = new QDialog;
               QVBoxLayout *layout = new QVBoxLayout;
               layout->addWidget(vw);
             dialog->open();
          vw->show();
         player->play();

}
}
c++ qt user-interface
1个回答
1
投票

而不是this->setCentralWidget(vw);,您必须创建一个对话框并将视频小部件添加到其中,然后显示该对话框。为此,请按以下步骤进行操作:

  1. 使用以下QDialog.cpp文件向您的项目添加.h

Dialog.h

#include <QDialog>
#include <QVBoxLayout>
#include <QMediaPlayer>
#include <QVideoWidget>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = nullptr);
    ~Dialog();

    void playVideo(const QString &fileName);

protected:
    void closeEvent(QCloseEvent *e) override;

private:
    Ui::Dialog *ui;
    QVBoxLayout *lay;
    QMediaPlayer *player;
    QVideoWidget *vw;

};

Dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);

}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::playVideo(const QString &fileName)
{
    player = new QMediaPlayer;
    vw=new QVideoWidget;
    lay = new QVBoxLayout;
    lay->addWidget(vw);
    player->setVideoOutput(vw) ;
    setLayout(lay);
    player->setMedia(QUrl::fromLocalFile(fileName));
    open();
    vw->show();
    player->play();
}

void Dialog::closeEvent(QCloseEvent *e)
{
    player->stop();
    delete player;
    delete vw;
    delete lay;
}
  1. 然后,如下修改Mainwindow.h:2-1。将新对话框添加为#include "dialog.h"2-2。在private:部分中,定义Dialog *dialog;
  2. 如下修改MainWindow::on_pushButton_clicked()

void MainWindow::on_pushButton_clicked()
{
    QString fileName = QFileDialog::getOpenFileName(this,
                                                    tr("Open Video"), "C://", "All files (*.*);Video files(*.*)");

    dialog->playVideo(fileName);
}
© www.soinside.com 2019 - 2024. All rights reserved.