mainwindows.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <imagewidget.h>
#include <QMainWindow>
#include <Qurl>
#include<QDesktopServices>
#include<QFileDialog>
#include<QMessageBox>
#include<Qpainter>
#include <Qimage>
#include <QWidget>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QVideoWidget>
#include <QVBoxLayout>
#include <mainwindow.h>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public slots:
void slot_itemClicked(QListWidgetItem*);
public:
explicit MainWindow(QWidget *parent = 0);
//ImageWidget q;
~MainWindow();
private slots:
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_pushButton_play_and_pause_clicked();
public:
Ui::MainWindow *ui;
private:
QMediaPlayer *mediaPlayer;
QVideoWidget *videoWidget;
QMediaPlaylist *mediaPlayerlist;
//QWidget * widget;
QVBoxLayout *layout_video;
private:
QStringList m_imgList; // 文件目录下所有的图像文件名
QListWidget *m_listWidget; // 预览窗口
QString m_strPath; // 文件夹路径
QLabel m_showWidget; // 图像显示窗口
};
#endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDir>
#include <QStringList>
#include <QListWidget>
#include <QVBoxLayout>
#include <QListWidgetItem>
#include <mainwindow.h>
#include "ui_mainwindow.h"
bool play_state;
//是否重新载入视频
bool if_reload=false;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->pushButton_play_and_pause->setEnabled(false);
//ui->pushButton_volume->setEnabled(false);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
QString path = QFileDialog::getOpenFileName(this, tr("选择视频"), ".", tr("Image Files(*.flv *.mp4)"));//得到视频路径
//播放状态,true为播放,false为暂停
QFile file(path);
if(!file.open(QIODevice::ReadOnly))
{
QMessageBox::information(NULL, "Title", "Content", QMessageBox::Ok, QMessageBox::Ok);
return;
}
if(if_reload)
{//重新加载视频时,重置以下变量
delete layout_video;
delete mediaPlayer;
delete videoWidget;
}
if_reload = true;
mediaPlayer = new QMediaPlayer();
videoWidget = new QVideoWidget();
layout_video = new QVBoxLayout;
//player = new QMediaPlayer;
// widget = new QVideoWidget;
//设置视频播放区域与Label的边距
layout_video->setMargin(1);
//根据label_player尺寸设置播放区域
mediaPlayer->setMedia(QUrl::fromLocalFile(path));
//play_state为true表示播放,false表示暂停
play_state = true;
//启用播放/暂停按钮,并将其文本设置为“暂停”
ui->pushButton_play_and_pause->setEnabled(true);
ui->pushButton_play_and_pause->setText("暂停");
//播放器开启
videoWidget->resize(ui->label_player->size());
layout_video->addWidget(videoWidget);
ui->label_player->setLayout(layout_video);
mediaPlayer->setVideoOutput(videoWidget);
mediaPlayer->play();
//mediaPlayer->setVideoOutput(ui->widget);
//第一种方法:mediaPlayer直接setMedia()
//mediaPlayer->setMedia(QUrl::fromLocalFile(path));
// mediaPlayer->play();
}
void MainWindow::on_pushButton_play_and_pause_clicked()
{
//反转播放状态
if(play_state)
{
mediaPlayer->pause();
ui->pushButton_play_and_pause->setText("播放");
}
else
{
mediaPlayer->play();
ui->pushButton_play_and_pause->setText("暂停");
}
play_state = !play_state;
}
void MainWindow::on_pushButton_2_clicked()
{
this->setWindowTitle("云胡");
this->setMinimumSize(800, 600);
this->setMaximumSize(1600,1200);
m_showWidget.setWindowTitle("Image Show");
m_showWidget.setAlignment(Qt::AlignCenter);
const QSize IMAGE_SIZE(250, 150);
const QSize ITEM_SIZE(250, 150);
// 判断路径是否存在
m_strPath = "E:\\img";
QDir dir(m_strPath);
if (!dir.exists()) {
return;
}
// 设置过滤器
dir.setFilter(QDir::Files | QDir::NoSymLinks);
QStringList filters;
filters << "*.png" << "*.jpg";
dir.setNameFilters(filters);
m_imgList = dir.entryList();
if (m_imgList.count() <= 0) {
return;
}
// QListWidget基本设置
m_listWidget = new QListWidget(this);
m_listWidget->setIconSize(IMAGE_SIZE);
m_listWidget->setResizeMode(QListView::Adjust);
m_listWidget->setViewMode(QListView::IconMode);
m_listWidget->setMovement(QListView::Static);
m_listWidget->setSpacing(8);
// 创建单元项
for (int i = 0; i<m_imgList.count(); ++i) {
//img->load(m_strPath + "\\" + m_imgList.at(i));
//ui->label->setPixmap(pixmap);
QPixmap pixmap(m_strPath + "\\" + m_imgList.at(i));
QListWidgetItem *listWidgetItem = new QListWidgetItem(QIcon(pixmap.scaled(IMAGE_SIZE)), m_imgList.at(i));
listWidgetItem->setSizeHint(ITEM_SIZE);
m_listWidget->insertItem(i, listWidgetItem);
}
// 窗口布局
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(m_listWidget);
mainLayout->setMargin(0);
//this->setLayout(mainLayout);
ui->label->setLayout(mainLayout);
// 信号与槽
connect(m_listWidget, SIGNAL(itemClicked(QListWidgetItem*)), this, SLOT(slot_itemClicked(QListWidgetItem*)));//点击了某个图片调用函数
}
// 最大化窗口显示图像
void MainWindow::slot_itemClicked(QListWidgetItem * item) {
m_showWidget.setPixmap(QPixmap(m_strPath + "\\" + m_imgList.at(m_listWidget->row(item))));
m_showWidget.showMaximized();
}