From 8df2ee44e0e9151681bb3c546f1327ef90e305e1 Mon Sep 17 00:00:00 2001 From: Gary Wang Date: Mon, 6 Apr 2020 15:15:13 +0800 Subject: [PATCH] init commit --- .gitignore | 73 +++++ CMakeLists.txt | 26 ++ CMakeLists.txt.user | 344 ++++++++++++++++++++ icons/audio-volume-high.png | Bin 0 -> 19431 bytes icons/media-playback-start.png | Bin 0 -> 18830 bytes icons/media-playback-stop.png | Bin 0 -> 18294 bytes icons/media-playlist-repeat.png | Bin 0 -> 18685 bytes icons/media-skip-backward.png | Bin 0 -> 18011 bytes icons/media-skip-forward.png | Bin 0 -> 18001 bytes icons/view-media-playlist.png | Bin 0 -> 19164 bytes icons/window-close.png | Bin 0 -> 3037 bytes icons/window-minimize.png | Bin 0 -> 19837 bytes main.cpp | 11 + mainwindow.cpp | 80 +++++ mainwindow.h | 39 +++ mainwindow.ui | 537 ++++++++++++++++++++++++++++++++ resources.qrc | 13 + seekableslider.cpp | 29 ++ seekableslider.h | 20 ++ 19 files changed, 1172 insertions(+) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 CMakeLists.txt.user create mode 100644 icons/audio-volume-high.png create mode 100644 icons/media-playback-start.png create mode 100644 icons/media-playback-stop.png create mode 100644 icons/media-playlist-repeat.png create mode 100644 icons/media-skip-backward.png create mode 100644 icons/media-skip-forward.png create mode 100644 icons/view-media-playlist.png create mode 100644 icons/window-close.png create mode 100644 icons/window-minimize.png create mode 100644 main.cpp create mode 100644 mainwindow.cpp create mode 100644 mainwindow.h create mode 100644 mainwindow.ui create mode 100644 resources.qrc create mode 100644 seekableslider.cpp create mode 100644 seekableslider.h diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1358d83 --- /dev/null +++ b/.gitignore @@ -0,0 +1,73 @@ +# This file is used to ignore files which are generated +# ---------------------------------------------------------------------------- + +*~ +*.autosave +*.a +*.core +*.moc +*.o +*.obj +*.orig +*.rej +*.so +*.so.* +*_pch.h.cpp +*_resource.rc +*.qm +.#* +*.*# +core +!core/ +tags +.DS_Store +.directory +*.debug +Makefile* +*.prl +*.app +moc_*.cpp +ui_*.h +qrc_*.cpp +Thumbs.db +*.res +*.rc +/.qmake.cache +/.qmake.stash + +# qtcreator generated files +*.pro.user* + +# xemacs temporary files +*.flc + +# Vim temporary files +.*.swp + +# Visual Studio generated files +*.ib_pdb_index +*.idb +*.ilk +*.pdb +*.sln +*.suo +*.vcproj +*vcproj.*.*.user +*.ncb +*.sdf +*.opensdf +*.vcxproj +*vcxproj.* + +# MinGW generated files +*.Debug +*.Release + +# Python byte code +*.pyc + +# Binaries +# -------- +*.dll +*.exe + diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..8d85f48 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.5) + +project(pineapple-music 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(Qt5 COMPONENTS Widgets REQUIRED) + +add_executable(pineapple-music + main.cpp + mainwindow.cpp + mainwindow.h + seekableslider.cpp + seekableslider.h + mainwindow.ui + resources.qrc +) + +target_link_libraries(pineapple-music PRIVATE Qt5::Widgets) diff --git a/CMakeLists.txt.user b/CMakeLists.txt.user new file mode 100644 index 0000000..6885971 --- /dev/null +++ b/CMakeLists.txt.user @@ -0,0 +1,344 @@ + + + + + + EnvironmentId + {9f1781ab-997a-40f7-b069-9b551fb2d8f3} + + + ProjectExplorer.Project.ActiveTarget + 0 + + + ProjectExplorer.Project.EditorSettings + + true + false + true + + Cpp + + CppGlobal + + + + QmlJS + + QmlJSGlobal + + + 2 + UTF-8 + false + 4 + false + 80 + true + true + 1 + true + false + 0 + true + true + 0 + 8 + true + 1 + true + true + true + false + + + + ProjectExplorer.Project.PluginSettings + + + -fno-delayed-template-parsing + + true + + + + ProjectExplorer.Project.Target.0 + + Desktop Qt 5.13.1 MinGW 64-bit + Desktop Qt 5.13.1 MinGW 64-bit + qt.qt5.5131.win64_mingw73_kit + 0 + 0 + 0 + + + CMAKE_BUILD_TYPE:STRING=Debug + + C:/Users/Gary/Source/build-pineapple-music-Desktop_Qt_5_13_1_MinGW_64_bit-Debug + + + + + all + + true + CMake Build + + CMakeProjectManager.MakeStep + + 1 + Build + + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMake Build + + CMakeProjectManager.MakeStep + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + Debug + CMakeProjectManager.CMakeBuildConfiguration + + + + CMAKE_BUILD_TYPE:STRING=Release + + C:/Users/Gary/Source/build-pineapple-music-Desktop_Qt_5_13_1_MinGW_64_bit-Release + + + + + all + + true + CMake Build + + CMakeProjectManager.MakeStep + + 1 + Build + + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMake Build + + CMakeProjectManager.MakeStep + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release + Release + CMakeProjectManager.CMakeBuildConfiguration + + + + CMAKE_BUILD_TYPE:STRING=RelWithDebInfo + + C:/Users/Gary/Source/build-pineapple-music-Desktop_Qt_5_13_1_MinGW_64_bit-Release-with-Debug-Information + + + + + all + + true + CMake Build + + CMakeProjectManager.MakeStep + + 1 + Build + + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMake Build + + CMakeProjectManager.MakeStep + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Release with Debug Information + Release with Debug Information + CMakeProjectManager.CMakeBuildConfiguration + + + + CMAKE_BUILD_TYPE:STRING=MinSizeRel + + C:/Users/Gary/Source/build-pineapple-music-Desktop_Qt_5_13_1_MinGW_64_bit-Minimum-Size-Release + + + + + all + + true + CMake Build + + CMakeProjectManager.MakeStep + + 1 + Build + + ProjectExplorer.BuildSteps.Build + + + + + + clean + + true + CMake Build + + CMakeProjectManager.MakeStep + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Minimum Size Release + Minimum Size Release + CMakeProjectManager.CMakeBuildConfiguration + + 4 + + + 0 + 部署 + + ProjectExplorer.BuildSteps.Deploy + + 1 + Deploy Configuration + + ProjectExplorer.DefaultDeployConfiguration + + 1 + + + dwarf + + cpu-cycles + + + 250 + -F + true + 4096 + false + false + 1000 + + true + + false + false + false + false + true + 0.01 + 10 + true + kcachegrind + 1 + 25 + + 1 + true + false + true + valgrind + + 0 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + + 2 + + + pineapple-music + CMakeProjectManager.CMakeRunConfiguration.C:/Users/Gary/Source/pineapple-music///::///pineapple-music + + 3768 + false + true + false + false + true + + C:/Users/Gary/Source/build-pineapple-music-Desktop_Qt_5_13_1_MinGW_64_bit-Debug + + 1 + + + + ProjectExplorer.Project.TargetCount + 1 + + + ProjectExplorer.Project.Updater.FileVersion + 22 + + + Version + 22 + + diff --git a/icons/audio-volume-high.png b/icons/audio-volume-high.png new file mode 100644 index 0000000000000000000000000000000000000000..a1ab4fd3ef24545173b501df3a305c7543bc9f47 GIT binary patch literal 19431 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 A1^@s6 literal 0 HcmV?d00001 diff --git a/icons/media-playback-start.png b/icons/media-playback-start.png new file mode 100644 index 0000000000000000000000000000000000000000..37ee0c8b6635d54aa342eb135346b473b6091074 GIT binary patch literal 18830 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 literal 0 HcmV?d00001 diff --git a/icons/media-playback-stop.png b/icons/media-playback-stop.png new file mode 100644 index 0000000000000000000000000000000000000000..751449eaa9278f757843b1bbc9900145c893a049 GIT binary patch literal 18294 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 literal 0 HcmV?d00001 diff --git a/icons/window-minimize.png b/icons/window-minimize.png new file mode 100644 index 0000000000000000000000000000000000000000..d6ab8fd3e2ba8fd789923195cff42cb916f811bf GIT binary patch literal 19837 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 + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + return a.exec(); +} diff --git a/mainwindow.cpp b/mainwindow.cpp new file mode 100644 index 0000000..4c6c0f8 --- /dev/null +++ b/mainwindow.cpp @@ -0,0 +1,80 @@ +#include "mainwindow.h" +#include "./ui_mainwindow.h" + +#include +#include + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) + , ui(new Ui::MainWindow) +{ + ui->setupUi(this); + + this->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint | Qt::WindowMinimizeButtonHint); + this->setAttribute(Qt::WA_TranslucentBackground, true); + + m_bgLinearGradient.setColorAt(0, QColor(255, 255, 255, 25)); // a:0 + m_bgLinearGradient.setColorAt(1, QColor(255, 255, 255, 200)); + m_bgLinearGradient.setStart(0, 0); + m_bgLinearGradient.setFinalStop(0, height()); + + m_fadeOutAnimation = new QPropertyAnimation(this, "windowOpacity", this); + m_fadeOutAnimation->setDuration(400); + m_fadeOutAnimation->setStartValue(1); + m_fadeOutAnimation->setEndValue(0); + connect(m_fadeOutAnimation, &QPropertyAnimation::finished, this, &QMainWindow::close); +} + +MainWindow::~MainWindow() +{ + delete ui; +} + +void MainWindow::closeEvent(QCloseEvent *) +{ + qApp->exit(); +} + +void MainWindow::paintEvent(QPaintEvent * e) +{ + QPainter painter(this); + + painter.setBrush(QBrush(m_bgLinearGradient)); + painter.setPen(Qt::NoPen); + painter.drawRect(0, 0, width(), height()); + + return QMainWindow::paintEvent(e); +} + +void MainWindow::mousePressEvent(QMouseEvent *event) +{ + if (event->buttons() & Qt::LeftButton && !isMaximized()) { + m_clickedOnWindow = true; + m_oldMousePos = event->pos(); + event->accept(); + } + + return QMainWindow::mousePressEvent(event); +} + +void MainWindow::mouseMoveEvent(QMouseEvent *event) +{ + if (event->buttons() & Qt::LeftButton && m_clickedOnWindow) { + move(event->globalPos() - m_oldMousePos); + event->accept(); + } + + return QMainWindow::mouseMoveEvent(event); +} + +void MainWindow::mouseReleaseEvent(QMouseEvent *event) +{ + m_clickedOnWindow = false; + + return QMainWindow::mouseReleaseEvent(event); +} + +void MainWindow::on_closeWindowBtn_clicked() +{ + m_fadeOutAnimation->start(); +} diff --git a/mainwindow.h b/mainwindow.h new file mode 100644 index 0000000..6f9b7ec --- /dev/null +++ b/mainwindow.h @@ -0,0 +1,39 @@ +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include + +QT_BEGIN_NAMESPACE +namespace Ui { class MainWindow; } + +class QPropertyAnimation; +QT_END_NAMESPACE + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = nullptr); + ~MainWindow() override; + +protected: + void closeEvent(QCloseEvent *) override; + void paintEvent(QPaintEvent *e) override; + void mousePressEvent(QMouseEvent *event) override; + void mouseMoveEvent(QMouseEvent *event) override; + void mouseReleaseEvent(QMouseEvent *event) override; + +private slots: + void on_closeWindowBtn_clicked(); + +private: + QPoint m_oldMousePos; + bool m_clickedOnWindow = false; + QLinearGradient m_bgLinearGradient; + + Ui::MainWindow *ui; + + QPropertyAnimation *m_fadeOutAnimation; +}; +#endif // MAINWINDOW_H diff --git a/mainwindow.ui b/mainwindow.ui new file mode 100644 index 0000000..edf7775 --- /dev/null +++ b/mainwindow.ui @@ -0,0 +1,537 @@ + + + MainWindow + + + + 0 + 0 + 485 + 160 + + + + + 485 + 160 + + + + Pineapple Player + + + /****** Slider ******/ + +QSlider::groove:horizontal { + border: 1px solid grey; + border-radius: 3px; + height: 4px; + margin: 0px 0; +} + +QSlider::sub-page:horizontal { + border-radius: 3px; + background: rgb(85, 170, 0); +} + +QSlider::groove:vertical { + border: 1px solid grey; + border-radius: 3px; + width: 4px; + margin: 0px 0; +} + +QSlider::handle:vertical { + border-radius: 3px; + border: 0px solid #5c5c5c; + background: rgb(85, 170, 0); + margin: -5px -5px -5px -5px; + top: 5px; bottom: 5px; +} + +QSlider::handle:vertical:hover { + border-radius: 3px; + border: 0px solid #5c5c5c; + background: rgb(85, 255, 0); + margin: -5px -5px -5px -5px; + top: 5px; bottom: 5px; +} + +QSlider::add-page:vertical { + border-radius: 3px; + background: rgb(85, 170, 0); +} + +/****** PushButton ******/ + +QPushButton { + border: 0px solid grey; + background-color: transparent; +} + +QPushButton:hover { + background-color: rgba(255, 255, 255, 220); +} + +QPushButton:pressed { + background-color: rgba(255, 255, 255, 250); +} + +QPushButton#closeWindowBtn { + color: white; + background-color: rgb(230, 0, 0); +} + +QPushButton#closeWindowBtn:hover { + background-color: rgb(255, 0, 0); +} + +/****** Label ******/ + +QLabel#coverLabel{ + border: 1px solid grey; +} + + + + + + + + 0 + 0 + + + + + 7 + + + 10 + + + 0 + + + 0 + + + 0 + + + + + 10 + + + + + + 0 + 0 + + + + + 128 + 128 + + + + + 128 + 128 + + + + AlbumCover + + + + + + + 0 + + + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 25 + 20 + + + + ^ + + + + + + + + 25 + 20 + + + + + + + + :/icons/icons/window-minimize.png:/icons/icons/window-minimize.png + + + + + + + + 40 + 20 + + + + + 40 + 20 + + + + + + + + :/icons/icons/window-close.png:/icons/icons/window-close.png + + + + + + + + + QLayout::SetDefaultConstraint + + + 10 + + + 10 + + + + + + 0 + 0 + + + + The Doge Song - Various Artists + + + + + + + 44100 Hz | 233 Kbps | Stereo | MP3 + + + + + + + + + 1:10 + + + + + + + 3:12 + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + Qt::Horizontal + + + + + + + 5 + + + + + + 32 + 32 + + + + + 32 + 32 + + + + + + + + + + + :/icons/icons/media-playback-start.png:/icons/icons/media-playback-start.png + + + + 32 + 32 + + + + + + + + + 32 + 32 + + + + + 32 + 32 + + + + + + + + :/icons/icons/media-playback-stop.png:/icons/icons/media-playback-stop.png + + + + 32 + 32 + + + + + + + + + 32 + 32 + + + + + 32 + 32 + + + + + + + + :/icons/icons/media-skip-backward.png:/icons/icons/media-skip-backward.png + + + + 32 + 32 + + + + + + + + + 32 + 32 + + + + + 32 + 32 + + + + + + + + :/icons/icons/media-skip-forward.png:/icons/icons/media-skip-forward.png + + + + 32 + 32 + + + + + + + + + 32 + 32 + + + + + 32 + 32 + + + + + + + + :/icons/icons/view-media-playlist.png:/icons/icons/view-media-playlist.png + + + + 32 + 32 + + + + + + + + + 32 + 32 + + + + + 32 + 32 + + + + + + + + :/icons/icons/media-playlist-repeat.png:/icons/icons/media-playlist-repeat.png + + + + 32 + 32 + + + + + + + + + 32 + 32 + + + + + 32 + 32 + + + + + + + + :/icons/icons/audio-volume-high.png:/icons/icons/audio-volume-high.png + + + + 32 + 32 + + + + + + + + + 64 + 32 + + + + 99 + + + Qt::Horizontal + + + + + + + + + + + + + + + + + SeekableSlider + QSlider +
seekableslider.h
+
+
+ + + + +
diff --git a/resources.qrc b/resources.qrc new file mode 100644 index 0000000..98f22de --- /dev/null +++ b/resources.qrc @@ -0,0 +1,13 @@ + + + icons/media-playback-start.png + icons/media-playback-stop.png + icons/media-skip-backward.png + icons/media-skip-forward.png + icons/audio-volume-high.png + icons/media-playlist-repeat.png + icons/view-media-playlist.png + icons/window-close.png + icons/window-minimize.png + + diff --git a/seekableslider.cpp b/seekableslider.cpp new file mode 100644 index 0000000..4d79ad4 --- /dev/null +++ b/seekableslider.cpp @@ -0,0 +1,29 @@ +#include "seekableslider.h" + +SeekableSlider::SeekableSlider(QWidget *parent) : + QSlider(parent) +{ + //关闭分段移动 + setSingleStep(0); + setPageStep(0); +} + +//点击Slider即可调节Value +//只写了横向模式的Slider…… +void SeekableSlider::mousePressEvent(QMouseEvent *event) +{ + if (event->buttons() & Qt::LeftButton) { + QSlider::mousePressEvent(event); + double pos = event->pos().x() / (double)width(); + setValue(pos * (maximum() - minimum()) + minimum()); + } +} + +void SeekableSlider::mouseMoveEvent(QMouseEvent *event) +{ + if (event->buttons() & Qt::LeftButton) { + QSlider::mousePressEvent(event); + double pos = event->pos().x() / (double)width(); + setValue(pos * (maximum() - minimum()) + minimum()); + } +} diff --git a/seekableslider.h b/seekableslider.h new file mode 100644 index 0000000..3ed4e50 --- /dev/null +++ b/seekableslider.h @@ -0,0 +1,20 @@ +#pragma once + +#include +#include + +class SeekableSlider : public QSlider +{ + Q_OBJECT +public: + explicit SeekableSlider(QWidget *parent = nullptr); + +signals: + +public slots: + +protected: + void mousePressEvent(QMouseEvent *event) override; + void mouseMoveEvent(QMouseEvent *event) override; +}; +