这是我的代码。在此代码中,视频显示在主窗口中,而不是新窗口中。我想在给定的时间在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();
}
}
而不是this->setCentralWidget(vw);
,您必须创建一个对话框并将视频小部件添加到其中,然后显示该对话框。为此,请按以下步骤进行操作:
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;
}
Mainwindow.h
:2-1。将新对话框添加为#include "dialog.h"
2-2。在private:
部分中,定义Dialog *dialog;
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);
}