基于Qt模仿网易云音乐播放器

5 篇文章 1 订阅

在这里插入图片描述

在这里插入图片描述
基于Qt模仿网易云音乐界面,目前只实现了部分界面,后续继续完善改造。
部分代码:

#ifndef MYSQLDATAMGR_H
#define MYSQLDATAMGR_H

#include <QObject>
#include <QDebug>
#include <QSqlDatabase>
#include <QSqlQuery>

/**
 * @brief The MySqlDataMgr class
 * 数据库管理类
 */
class MySqlDataMgr
{
private:
    MySqlDataMgr();
    MySqlDataMgr(const MySqlDataMgr&);
    ~MySqlDataMgr();
public:
    static MySqlDataMgr* getInstance();
    bool InitSqlDatabase();
private:
    static MySqlDataMgr* m_pSqlDataMgr;
};

#endif // MYSQLDATAMGR_H

#include "MySqlDataMgr.h"

MySqlDataMgr* MySqlDataMgr::m_pSqlDataMgr=nullptr;
MySqlDataMgr::MySqlDataMgr()
{

}

MySqlDataMgr::~MySqlDataMgr()
{
    if(m_pSqlDataMgr)
    {
        delete m_pSqlDataMgr;
    }
}

MySqlDataMgr *MySqlDataMgr::getInstance()
{
    if(m_pSqlDataMgr==nullptr)
    {
        return new MySqlDataMgr();
    }
    return m_pSqlDataMgr;
}

bool MySqlDataMgr::InitSqlDatabase()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("127.0.0.1");
    db.setPort(3306);
    db.setUserName("root");
    db.setPassword("123123");
    db.setDatabaseName("musicmgr");
    if(!db.open())
    {
        qDebug()<<"Mysql Error! "<<endl;
        return false;
    }
    return true;
}

#ifndef RIGHTMENU_H
#define RIGHTMENU_H

#include <QWidget>
#include <QPushButton>
#include <QLayout>
#include <QLabel>
#include <QComboBox>

/**
 *右侧菜单栏窗口
 */
namespace Ui {
class RightMenu;
}
enum RightType{
    FindMusic,//发现音乐信号
    Video,//视频信号
    Friend,//朋友信号
    Streaming,//直播信号
    FM,//私人FM信号
    LocalMusic,//本地音乐信号
    DownLoad,//下载管理信号
    Storage,//我的音乐云盘信号
    Radio,//我的电台信号
    Collect,//我的收藏信号
    LoveMusic,//我喜欢的音乐信号
    NewMusic,//新
};
class RightMenu : public QWidget
{
    Q_OBJECT

public:
    explicit RightMenu(QWidget *parent = nullptr);
    ~RightMenu();
private:
    void InitMenu();//初始化菜单
    void addIconAndTextButton();//添加按钮
    void addButton();//加入按钮
    QPushButton* CreateButton(const QString& sImage,const QString& sText);
signals:
    void ClickRightType(RightType RightMenuType);//发现音乐信号
private:
    QVBoxLayout* pHLayout;
    QVBoxLayout* pButtonGroupLayout;
    QVBoxLayout* pTopButtonLayout;
    bool isCliek=true;
private:
    Ui::RightMenu *ui;
};

#endif // RIGHTMENU_H

#include "RightMenu.h"
#include "ui_RightMenu.h"

RightMenu::RightMenu(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::RightMenu)
{
    ui->setupUi(this);
    InitMenu();
}

RightMenu::~RightMenu()
{
    delete ui;
}

void RightMenu::InitMenu()
{
    addIconAndTextButton();
    addButton();
    pHLayout = new QVBoxLayout();
    pHLayout->addLayout(pTopButtonLayout);
    pHLayout->addLayout(pButtonGroupLayout);
    pHLayout->setSpacing(10);
    this->setLayout(pHLayout);
}

void RightMenu::addButton()
{
    pTopButtonLayout = new QVBoxLayout();
    QPushButton *pFindMusic = new QPushButton(u8"发现音乐");
    connect(pFindMusic,&QPushButton::clicked,[=](){
        emit ClickRightType(FindMusic);
    });
    QPushButton *pVideo = new QPushButton(u8"视频");
    connect(pVideo,&QPushButton::clicked,[=](){
        emit ClickRightType(Video);
    });
    QPushButton *pFriend = new QPushButton(u8"朋友");
    connect(pFriend,&QPushButton::clicked,[=](){
        emit ClickRightType(Friend);
    });
    QPushButton *pStreaming = new QPushButton(u8"直播");
    connect(pStreaming,&QPushButton::clicked,[=](){
        emit ClickRightType(Streaming);
    });
    QPushButton *pFM = new QPushButton(u8"私人FM");
    connect(pFM,&QPushButton::clicked,[=](){
        emit ClickRightType(FM);
    });
    pTopButtonLayout->addWidget(pFindMusic);
    pTopButtonLayout->addWidget(pVideo);
    pTopButtonLayout->addWidget(pFriend);
    pTopButtonLayout->addWidget(pStreaming);
    pTopButtonLayout->addWidget(pFM);
    pTopButtonLayout->setSpacing(0);
}

void RightMenu::addIconAndTextButton()
{
    pButtonGroupLayout = new QVBoxLayout();
    QPushButton *pLocalMusic = CreateButton(u8":/Icons/Music.png",u8"本地音乐");
    connect(pLocalMusic,&QPushButton::clicked,[=](){
        emit ClickRightType(LocalMusic);
    });
    QPushButton *pDownLoad = CreateButton(u8":/Icons/download.png",u8"下载管理");
    connect(pDownLoad,&QPushButton::clicked,[=](){
        emit ClickRightType(DownLoad);
    });
    QPushButton *pStorage = CreateButton(u8":/Icons/storage.png",u8"我的音乐云盘");
    connect(pStorage,&QPushButton::clicked,[=](){
        emit ClickRightType(Storage);
    });
    QPushButton *pRadio = CreateButton(u8":/Icons/Radio.png",u8"我的电台");
    connect(pRadio,&QPushButton::clicked,[=](){
        emit ClickRightType(Radio);
    });
    QPushButton *pCollect = CreateButton(u8":/Icons/collect.png",u8"我的收藏");
    connect(pCollect,&QPushButton::clicked,[=](){
        emit ClickRightType(Collect);
    });
    QLabel* pLel = new QLabel(u8"我的音乐");
    pLel->setFixedHeight(20);
    pButtonGroupLayout->addWidget(pLel);
    pButtonGroupLayout->addWidget(pLocalMusic);
    pButtonGroupLayout->addWidget(pDownLoad);
    pButtonGroupLayout->addWidget(pStorage);
    pButtonGroupLayout->addWidget(pRadio);
    pButtonGroupLayout->addWidget(pCollect);
    pButtonGroupLayout->setSpacing(0);
    QPushButton* pCreateSongList = new QPushButton(u8"创建的歌单");
    pCreateSongList->setIcon(QIcon(u8":/Icons/RightArrows.png"));
    pCreateSongList->setLayoutDirection(Qt::RightToLeft);
    pCreateSongList->setStyleSheet("background-color:rgb(19,112,190,0);border:none;"
                                   "color:#BDBDBD;font-size:15px;height:30;"
                                   "back-ground-origin:content;  padding-right:5px;");
    pButtonGroupLayout->addWidget(pCreateSongList);
    QPushButton* pLoveMusic= new QPushButton(u8"我喜欢的音乐");
    pLoveMusic->setIcon(QIcon(u8":/Icons/Love.png"));
    pLoveMusic->setLayoutDirection(Qt::LeftToRight);
    connect(pLoveMusic,&QPushButton::clicked,[=](){
        emit ClickRightType(LoveMusic);
    });
    QPushButton* pNewMusic= new QPushButton(u8"新");
    pNewMusic->setIcon(QIcon(u8":/Icons/New.png"));
    pNewMusic->setLayoutDirection(Qt::LeftToRight);
    connect(pNewMusic,&QPushButton::clicked,[=](){
        emit ClickRightType(NewMusic);
    });
    pButtonGroupLayout->addWidget(pLoveMusic);
    pButtonGroupLayout->addWidget(pNewMusic);
    connect(pCreateSongList,&QPushButton::clicked,[=]()mutable
    {
        if(isCliek){
            pLoveMusic->hide();
            pNewMusic->hide();
            pCreateSongList->setIcon(QIcon(u8":/Icons/RightArrows.png"));
            pCreateSongList->setLayoutDirection(Qt::RightToLeft);
            isCliek=false;
            return;
        }
        if(!isCliek)
        {
            pLoveMusic->show();
            pNewMusic->show();
            pCreateSongList->setIcon(QIcon(u8":/Icons/BottomArrows.png"));
            pCreateSongList->setLayoutDirection(Qt::RightToLeft);
            isCliek=true;
            return;
        }
    });
}

QPushButton *RightMenu::CreateButton(const QString &sImage, const QString &sText)
{
    QPushButton* pButton = new QPushButton();
    pButton->setIcon(QIcon(sImage));
    pButton->setText(sText);
    pButton->setLayoutDirection(Qt::LeftToRight);
    return pButton;
}

QQ:1594932770

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要使用Qt模拟网易云音乐播放器,你需要掌握以下技能: 1. Qt基础知识:了解Qt的基本概念和使用方法,包括QWidget、QMainWindow、QLabel、QPushButton等控件的使用方法,信号槽机制等。 2. 音频播放:使用Qt的QMediaPlayer类实现音频播放功能,包括播放、暂停、下一曲、上一曲等。 3. 界面设计:设计一个类似于网易云音乐播放器的界面,包括歌曲列表、歌曲封面、歌曲名称、歌曲进度条、音量控制等。 4. 网络请求:使用Qt的网络模块实现歌曲列表的获取、歌曲搜索等功能。 下面是一个简单的实现步骤: 1. 创建一个Qt应用程序,选择主窗口类型为QMainWindow。 2. 在主窗口中添加各种控件,包括歌曲列表、歌曲封面、歌曲名称、歌曲进度条、音量控制等。 3. 使用QMediaPlayer类实现音频播放功能,包括播放、暂停、下一曲、上一曲等。 4. 使用Qt的网络模块实现歌曲列表的获取、歌曲搜索等功能。 5. 实现歌曲列表的点击事件,以便用户可以选择歌曲进行播放。 6. 实现歌曲进度条和音量控制的功能,以便用户可以调整播放进度和音量大小。 7. 添加歌曲封面,以便用户可以查看当前播放歌曲的封面。 8. 最后进行界面美化和优化,使整个应用程序看起来更加美观和流畅。 希望这些步骤能够帮助你实现一个类似于网易云音乐播放器Qt应用程序。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值