C++ QtGUI使用Qfiledialogbox和qlabel显示视频
第一个代码 在该代码中,VideoCapture cap未获取文件名(包含视频路径),该文件名是在执行QFileDialog后获得的,即使用cap.open(“文件名”),代码未执行,而使用cap.open(“G:/mixer.avi”),代码正在执行。意味着如果视频路径是在cap.open()中直接给定的,则代码正在执行,但它不会将QFileDialog输出(即文件名)作为输入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
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。需要做的两件事:
VideoCapture
所需的几乎没有什么不同,因此该字符串的第一位可能会有一些额外的字符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不显示视频。如何从文件夹中选择文件。