Graphics view
-
I have doubt ie. How to play video file on graphics view , Added all video files in single folder and give it name as Sample videos . I used list widget to display all video files with extension in this code . It displays all video files and when video item clicked video is played , code is crashed what is the reason for that?
#include "mainwindow.h" #include "ui_mainwindow.h" QString folderpath; QStringList videoPaths; QMediaPlayer *player; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); ui->stackedWidget->setCurrentIndex(0); player = new QMediaPlayer; folderpath="C:/Users/admin/Desktop/Sample videos"; QDir shortcutsFolder1(folderpath); QFileInfoList shortcuts(shortcutsFolder1.entryInfoList(QDir::Files, QDir::Name | QDir::IgnoreCase)); foreach (QFileInfo fi, shortcuts) { QString videoPath = folderpath + "/" + fi.fileName(); QString ext = fi.suffix().toLower(); if (ext == "mp4" || ext == "avi" || ext == "mkv" ||ext == "wmv" || ext == "webm") { videoPaths.append(videoPath); QListWidgetItem *item = new QListWidgetItem(fi.fileName()); item->setIcon(QIcon(QPixmap("H:/Qt_5.15.2/Demo/video-icon-6.png").scaled(150, 125, Qt::IgnoreAspectRatio, Qt::SmoothTransformation))); ui->listWidget->addItem(item); } } ui->listWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); } void MainWindow::on_listWidget_itemClicked(QListWidgetItem *clickedItem) { int index = ui->listWidget->row(clickedItem); QString videoPath = videoPaths[index]; if (player) { player->stop(); delete player; } player = new QMediaPlayer; QGraphicsVideoItem *videoItem = new QGraphicsVideoItem; QGraphicsScene *scene = new QGraphicsScene(this); scene->addItem(videoItem); ui->graphicsView->setScene(scene); ui->graphicsView->setRenderHint(QPainter::Antialiasing, true); player->setVideoOutput(videoItem); QPixmap pixmap("H:/Qt_5.15.2/Demo/video-icon-6.png"); if (!pixmap.isNull()) { QPixmap scaledPixmap = pixmap.scaled(150, 125, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); clickedItem->setIcon(QIcon(scaledPixmap)); } else { qDebug() << "Error loading QPixmap"; } player->setMedia(QUrl::fromLocalFile(videoPath)); connect(player, &QMediaPlayer::stateChanged, this, &MainWindow::on_Playpause_pushButton_clicked); player->play(); }
-
I have doubt ie. How to play video file on graphics view , Added all video files in single folder and give it name as Sample videos . I used list widget to display all video files with extension in this code . It displays all video files and when video item clicked video is played , code is crashed what is the reason for that?
#include "mainwindow.h" #include "ui_mainwindow.h" QString folderpath; QStringList videoPaths; QMediaPlayer *player; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); ui->stackedWidget->setCurrentIndex(0); player = new QMediaPlayer; folderpath="C:/Users/admin/Desktop/Sample videos"; QDir shortcutsFolder1(folderpath); QFileInfoList shortcuts(shortcutsFolder1.entryInfoList(QDir::Files, QDir::Name | QDir::IgnoreCase)); foreach (QFileInfo fi, shortcuts) { QString videoPath = folderpath + "/" + fi.fileName(); QString ext = fi.suffix().toLower(); if (ext == "mp4" || ext == "avi" || ext == "mkv" ||ext == "wmv" || ext == "webm") { videoPaths.append(videoPath); QListWidgetItem *item = new QListWidgetItem(fi.fileName()); item->setIcon(QIcon(QPixmap("H:/Qt_5.15.2/Demo/video-icon-6.png").scaled(150, 125, Qt::IgnoreAspectRatio, Qt::SmoothTransformation))); ui->listWidget->addItem(item); } } ui->listWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); } void MainWindow::on_listWidget_itemClicked(QListWidgetItem *clickedItem) { int index = ui->listWidget->row(clickedItem); QString videoPath = videoPaths[index]; if (player) { player->stop(); delete player; } player = new QMediaPlayer; QGraphicsVideoItem *videoItem = new QGraphicsVideoItem; QGraphicsScene *scene = new QGraphicsScene(this); scene->addItem(videoItem); ui->graphicsView->setScene(scene); ui->graphicsView->setRenderHint(QPainter::Antialiasing, true); player->setVideoOutput(videoItem); QPixmap pixmap("H:/Qt_5.15.2/Demo/video-icon-6.png"); if (!pixmap.isNull()) { QPixmap scaledPixmap = pixmap.scaled(150, 125, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); clickedItem->setIcon(QIcon(scaledPixmap)); } else { qDebug() << "Error loading QPixmap"; } player->setMedia(QUrl::fromLocalFile(videoPath)); connect(player, &QMediaPlayer::stateChanged, this, &MainWindow::on_Playpause_pushButton_clicked); player->play(); }
As always - when your program is crashing use the debugger to see where and why it is crashing.
-
I have doubt ie. How to play video file on graphics view , Added all video files in single folder and give it name as Sample videos . I used list widget to display all video files with extension in this code . It displays all video files and when video item clicked video is played , code is crashed what is the reason for that?
#include "mainwindow.h" #include "ui_mainwindow.h" QString folderpath; QStringList videoPaths; QMediaPlayer *player; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); ui->stackedWidget->setCurrentIndex(0); player = new QMediaPlayer; folderpath="C:/Users/admin/Desktop/Sample videos"; QDir shortcutsFolder1(folderpath); QFileInfoList shortcuts(shortcutsFolder1.entryInfoList(QDir::Files, QDir::Name | QDir::IgnoreCase)); foreach (QFileInfo fi, shortcuts) { QString videoPath = folderpath + "/" + fi.fileName(); QString ext = fi.suffix().toLower(); if (ext == "mp4" || ext == "avi" || ext == "mkv" ||ext == "wmv" || ext == "webm") { videoPaths.append(videoPath); QListWidgetItem *item = new QListWidgetItem(fi.fileName()); item->setIcon(QIcon(QPixmap("H:/Qt_5.15.2/Demo/video-icon-6.png").scaled(150, 125, Qt::IgnoreAspectRatio, Qt::SmoothTransformation))); ui->listWidget->addItem(item); } } ui->listWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); } void MainWindow::on_listWidget_itemClicked(QListWidgetItem *clickedItem) { int index = ui->listWidget->row(clickedItem); QString videoPath = videoPaths[index]; if (player) { player->stop(); delete player; } player = new QMediaPlayer; QGraphicsVideoItem *videoItem = new QGraphicsVideoItem; QGraphicsScene *scene = new QGraphicsScene(this); scene->addItem(videoItem); ui->graphicsView->setScene(scene); ui->graphicsView->setRenderHint(QPainter::Antialiasing, true); player->setVideoOutput(videoItem); QPixmap pixmap("H:/Qt_5.15.2/Demo/video-icon-6.png"); if (!pixmap.isNull()) { QPixmap scaledPixmap = pixmap.scaled(150, 125, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); clickedItem->setIcon(QIcon(scaledPixmap)); } else { qDebug() << "Error loading QPixmap"; } player->setMedia(QUrl::fromLocalFile(videoPath)); connect(player, &QMediaPlayer::stateChanged, this, &MainWindow::on_Playpause_pushButton_clicked); player->play(); }
@Rockerz As Christian said, it's always a good idea to do basic debugging before you ask other people to take a look. You'll generally get much more useful feedback when you say things like where it's crashing and what sort of crash it is.
That said, the QPixmap constructor that takes a const char* doesn't take a filename: https://doc.qt.io/qt-6/qpixmap.html#QPixmap-4 I dunno if that's your issue. But it certainly is one of your issues.
-