C++ QtGUI使用Qfiledialogbox和qlabel显示视频

C++ QtGUI使用Qfiledialogbox和qlabel显示视频,c++,qt,opencv,qlabel,qmediaplayer,C++,Qt,Opencv,Qlabel,Qmediaplayer,第一个代码 在该代码中,VideoCapture cap未获取文件名(包含视频路径),该文件名是在执行QFileDialog后获得的,即使用cap.open(“文件名”),代码未执行,而使用cap.open(“G:/mixer.avi”),代码正在执行。意味着如果视频路径是在cap.open()中直接给定的,则代码正在执行,但它不会将QFileDialog输出(即文件名)作为输入 void MainWindow::on_pushButton_clicked() { if(ui->radi

第一个代码 在该代码中,VideoCapture cap未获取文件名(包含视频路径),该文件名是在执行QFileDialog后获得的,即使用cap.open(“文件名”),代码未执行,而使用cap.open(“G:/mixer.avi”),代码正在执行。意味着如果视频路径是在cap.open()中直接给定的,则代码正在执行,但它不会将QFileDialog输出(即文件名)作为输入

void MainWindow::on_pushButton_clicked()
{
 if(ui->radioButton->isChecked()) {


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

    connect(timer, SIGNAL(timeout()), this, SLOT(update_window()));
    timer->start(20);}}
    void MainWindow::update_window()
     {
     cap >> frame;

    cvtColor(frame, frame, cv::COLOR_BGR2RGB);

    qt_image = QImage((const unsigned char*) (frame.data), frame.cols, frame.rows, 
     QImage::Format_RGB888);

    ui->label->setPixmap(QPixmap::fromImage(qt_image));

    ui->label->resize(ui->label->pixmap()->size());
}
第二个代码

在这段QFileDialogbox代码中,视频正在显示,但没有在QLabel中显示。如何在QMultimedia中添加QLabel

 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) ;
          this->setCentralWidget(vw);
           player->setMedia(QUrl::fromLocalFile(fileName));
           vw->show();
          player->play();

}
}
可以将字符串作为输入,而不是QString。需要做的两件事:

  • 首先将QString文件名转换为字符串
  • 由于filedialog选择的文件输出与opencv
    VideoCapture
    所需的几乎没有什么不同,因此该字符串的第一位可能会有一些额外的字符
  • 可以将字符串作为输入,而不是QString。需要做的两件事:

  • 首先将QString文件名转换为字符串
  • 由于filedialog选择的文件输出与opencv
    VideoCapture
    所需的几乎没有什么不同,因此该字符串的第一位可能会有一些额外的字符

  • 我已经使用代码-std::string videopath=fileName.toLocal8Bit().constData()将QString转换为字符串;但代码没有运行。在这个框架的第一个位置需要什么类型的额外字符。因为FieldLogic给出了与我们在视频捕获中所需要的相同的路径。有没有其他代码来使用C++来代替FielDeLax来打开FieldLogic?这样我们就可以得到String而不是QString。不,对于filedialog,您需要qt。首先尝试使用
    imshow
    而不是使用qlabel来显示视频。首先检查,不显示的问题可能在ui端。我已成功使用imshow显示视频,但我必须从需要打开文件对话框的文件夹中选择文件。如果我使用qt使用文件对话框,则使用imshow videocapture不显示视频。如何从文件夹中选择文件。I已使用代码-std::string videopath=fileName.toLocal8Bit().constData()将QString转换为字符串;但代码没有运行。在这个框架的第一个位置需要什么类型的额外字符。因为FieldLogic给出了与我们在视频捕获中所需要的相同的路径。有没有其他代码来使用C++来代替FielDeLax来打开FieldLogic?这样我们就可以得到String而不是QString。不,对于filedialog,您需要qt。首先尝试使用
    imshow
    而不是使用qlabel来显示视频。首先检查,不显示的问题可能在ui端。我已成功使用imshow显示视频,但我必须从需要打开文件对话框的文件夹中选择文件。如果我使用qt使用文件对话框,则使用imshow videocapture不显示视频。如何从文件夹中选择文件。