Initial commit

parents
cmake_minimum_required(VERSION 3.5)
project(ReproductorMultimedia LANGUAGES CXX)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
find_package(Qt5 COMPONENTS Multimedia REQUIRED)
find_package(Qt5 COMPONENTS MultimediaWidgets REQUIRED)
set(PROJECT_SOURCES
main.cpp
mainwindow.cpp
mainwindow.h
mainwindow.ui
playlistmodel.h
playlistmodel.cpp
videowidget.h
videowidget.cpp
assets.qrc
)
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(ReproductorMultimedia
MANUAL_FINALIZATION
${PROJECT_SOURCES}
)
# Define target properties for Android with Qt 6 as:
# set_property(TARGET ReproductorMultimedia APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
# ${CMAKE_CURRENT_SOURCE_DIR}/android)
# For more information, see https://doc.qt.io/qt-6/qt-add-executable.html#target-creation
else()
if(ANDROID)
add_library(ReproductorMultimedia SHARED
${PROJECT_SOURCES}
)
# Define properties for Android with Qt 5 after find_package() calls as:
# set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
else()
add_executable(ReproductorMultimedia
${PROJECT_SOURCES}
)
endif()
endif()
target_link_libraries(ReproductorMultimedia PRIVATE Qt5::Widgets Qt5::Multimedia Qt5::MultimediaWidgets)
<RCC>
<qresource prefix="/">
<file>assets/aleatorio.png</file>
<file>assets/anterior.png</file>
<file>assets/bucle.png</file>
<file>assets/expandir.png</file>
<file>assets/icon.png</file>
<file>assets/pausa.png</file>
<file>assets/play.png</file>
<file>assets/siguiente.png</file>
<file>assets/stop.png</file>
<file>assets/eliminar.png</file>
<file>assets/guardar.png</file>
<file>assets/altavoz.png</file>
<file>assets/bucle1.png</file>
<file>assets/cerrar.png</file>
<file>assets/flecha.png</file>
<file>assets/abrir.png</file>
<file>assets/uno.png</file>
<file>assets/anadir.png</file>
<file>assets/anadirrem.png</file>
</qresource>
</RCC>
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMediaPlayer>
#include <QMediaObject>
#include <QMessageBox>
#include <QMediaPlaylist>
#include <QDir>
#include "playlistmodel.h"
#include <QCloseEvent>
const QString MEDIA_TYPE("*.mp3 *.mp4 *.mkv *.avi' *.ogg *.flv *.ogv *.webm");
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
//Interacciones con la interfaz
void on_videoButtonPlay_clicked();
void on_videoButtonStop_clicked();
void on_playlistButtonBack_clicked();
void on_playlistButtonNext_clicked();
void on_videoSlideVolume_valueChanged(int value);
void closeEvent(QCloseEvent *event);
void fullScreenVideo();
// PlayList
void openFailedPlaylist();
void loadPlaylist();
void save(bool ask = true);
void addPlayList();
void delPlayList();
void clickItem(const QModelIndex &index);
void playItem(const QModelIndex &index);
void openFile();
void closePlayList(bool ask = true);
void playListChanged(int start, int end);
// Playlist modes
void playListModeCurrentItemOnce();
void playListModeCurrentItemInLoop();
void playListModeSequential();
void playListModeLoop();
void playListModeRandom();
//Interacciones con el qmediaplayer
void on_videoTimeChanged(qint64 position);
void on_videoTime_sliderMoved(int position);
void on_videoStateChanged(QMediaPlayer::State state);
void on_videoTime_sliderPressed();
void on_videoTime_sliderReleased();
void on_videoTime_actionTriggered(int action);
void metadataChanged();
void updateMetadataView(int row);
private:
void setDisablePlaybackControl(bool disable);
void setDisablePlaylistControl(bool disable);
Ui::MainWindow *ui;
PlayListModel *_model;
QMediaPlaylist *_playlist;
bool _autosave;
bool _onlyPlayer;
QUrl _playListPath;
QDir _defaultDir;
bool _sliderPressed;
QMediaPlayer *_reproductor = nullptr;
QMap<QString ,QList<QPair<QString,QString>>> _metadatos;
QMediaPlayer *_metadatosLoader = nullptr;
};
#endif // MAINWINDOW_H
#include "playlistmodel.h"
#include <qdebug.h>
PlayListModel::PlayListModel(QObject *parent)
: QAbstractListModel(parent), _playlist(nullptr) {
}
PlayListModel::~PlayListModel() {
}
int PlayListModel::rowCount(const QModelIndex &parent) const {
if (parent.isValid() && !_playlist)
return 0;
return _playlist->mediaCount();
}
QVariant PlayListModel::data(const QModelIndex &index, int role) const {
if (!index.isValid() && !_playlist)
return QVariant();
switch (role) {
case Qt::DisplayRole:
return _playlist->media(index.row()).request().url().fileName();
default:
return QVariant();
}
}
QMediaPlaylist *PlayListModel::getPlaylist() const {
return _playlist;
}
void PlayListModel::setPlaylist(QMediaPlaylist *playlist) {
beginResetModel();
_playlist = playlist;
endResetModel();
}
#ifndef PLAYLISTMODEL_H
#define PLAYLISTMODEL_H
#include <QAbstractListModel>
#include <QMediaPlaylist>
class PlayListModel : public QAbstractListModel {
Q_OBJECT
public:
explicit PlayListModel(QObject *parent = nullptr);
virtual ~PlayListModel();
// Basic functionality:
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
QMediaPlaylist *getPlaylist() const;
void setPlaylist(QMediaPlaylist *playlist);
void updateModel() {
this->layoutChanged();
}
private:
QMediaPlaylist *_playlist;
};
#endif // PLAYLISTMODEL_H
#include "videowidget.h"
#include <QKeyEvent>
#include <QMouseEvent>
videowidget::videowidget(QWidget *parent)
: QVideoWidget(parent)
{
setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
QPalette p = palette();
p.setColor(QPalette::Window, Qt::black);
setPalette(p);
setAttribute(Qt::WA_OpaquePaintEvent);
}
void videowidget::keyPressEvent(QKeyEvent *event)
{
if (event->key() == Qt::Key_Escape && isFullScreen()) {
setFullScreen(false);
event->accept();
} else if (event->key() == Qt::Key_Enter && event->modifiers() & Qt::Key_Alt) {
setFullScreen(!isFullScreen());
event->accept();
} else {
QVideoWidget::keyPressEvent(event);
}
}
void videowidget::mouseDoubleClickEvent(QMouseEvent *event)
{
setFullScreen(!isFullScreen());
event->accept();
}
void videowidget::mousePressEvent(QMouseEvent *event)
{
QVideoWidget::mousePressEvent(event);
}
#ifndef VIDEOWIDGET_H
#define VIDEOWIDGET_H
#include <QVideoWidget>
class videowidget : public QVideoWidget
{
Q_OBJECT
public:
explicit videowidget(QWidget *parent = nullptr);
protected:
void keyPressEvent(QKeyEvent *event) override;
void mouseDoubleClickEvent(QMouseEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
};
#endif // VIDEOWIDGET_H
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment