【问题标题】:how to display frame of video in new window at a given time using qt如何使用qt在给定时间在新窗口中显示视频帧
【发布时间】:2020-06-03 08:51:21
【问题描述】:

这是我的代码。在此代码视频中显示在主窗口中,而不是在新窗口中。我想在给定时间在新窗口中显示视频帧意味着 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】:

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

    1. 使用以下.cpp.h 文件将QDialog 添加到您的项目中:

    对话框.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;
    
    };
    

    对话框.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);
    }
    

    【讨论】:

    • 视频正在新窗口中显示,但我必须在按钮上选择两次。第一次单击按钮视频不显示。第二次单击按钮,打开两个新窗口-一个是空白的,另一个正在显示视频。
    • 我必须在给定时间提取帧,这个时间没有指定。
    • 为什么第一次点击不显示?也许您的视频是一个大文件,不是吗?就算再等一会也不行?上面的修改后你能发布你的代码吗?
    • 是的,它是大文件,是的,如果我等待它不起作用....如果我第二次按下按钮并再次选择文件,那么它会显示视频文件,这是我的代码
    • 我修改了答案以彻底解决您的问题。此代码在我的机器上成功运行。我希望能解决你的问题。请根据我的回答修改您的代码,看看问题是否解决。如果是这样,请将此答案标记为“已解决”以帮助其他人。
    猜你喜欢
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    相关资源
    最近更新 更多