酷狗音乐模仿还在继续
来源:互联网 发布:linux 启动原理 编辑:程序博客网 时间:2024/04/29 11:48
酷狗音乐模仿还在继续
前一段时间刚好有时间,就试着去写一写酷狗音乐的界面,无奈好多资源图片找不到,只能凑合着用吧,界面做的还很粗糙,有待细化。仔细观察酷狗音乐界面,主要可以分为四部分构成:
- 标题栏
- 左边工具栏
- 右边歌曲、歌词、MV等界面
- 底部控制栏
下面主要说说界面的组成
界面的组成是这样的,标题栏、左边工具栏、右边内容区域、底部工具栏都是继承自QWidget的,主界面是继承自QFrame的,在主界面将其他各个界面进行了一个布局,最终实现了如上图所示的界面。
- 标题栏
标题栏中实现了各个按钮菜单的初始化,全部敲的代码。
TitleWidget.h
/*************************************************Copyright:kevinAuthor:Kevin LiQiDate:2016-02-09Email:kevinlq0912@163.comQQ:936563422Version:V1.0Description:音乐播放器---标题栏的实现**************************************************/#ifndef TITLEWIDGET_H#define TITLEWIDGET_H#include <QWidget>class PushButton;class QLabel;class QHBoxLayout;class SearchLineEdit;class MyMenu;class RemoteWidget;typedef enum TbnStatus{ BtnMax = 0, BtnMin}TBNSTATUS;class TitleWidget : public QWidget{ Q_OBJECTpublic: explicit TitleWidget(QWidget *parent = 0); ~TitleWidget(); void Translator();Q_SIGNALS: void signalClose(); void signalHideWidget(); void signalMax(); void signalMix(); void signalShowSkin(); //转发遥控器信号 void signalShowOrHideWidget(int);private Q_SLOTS: void slotChangeBtnStatus(int status); void slotOpenOrHideRemote(); void slotHideRemote();private: void initForm(); void initWidget(); void initConnect();private: QLabel *m_labelIcon; PushButton *m_TbnLogin; //登录 QLabel *m_label_div; PushButton *m_TbnRegister; //注册 SearchLineEdit *m_search; //索索框 PushButton *m_TbnGame; //游戏 PushButton *m_TbnNews; //消息通知 PushButton *m_TbnSkin; //皮肤 PushButton *m_TbnMenu; //主菜单 PushButton *m_TbnRemote; //遥控器 PushButton *m_TbnMenu_max; //最大化 PushButton *m_TbnMenu_min; //最小化 PushButton *m_TbnMenu_close; //关闭 QHBoxLayout *m_mainLayout; MyMenu *m_menu; RemoteWidget *m_remoteWidget; bool m_isOpenRemote; //是否打开遥控器};#endif // TITLEWIDGET_H
TitleWidget.cpp
void TitleWidget::initWidget(){ m_labelIcon = new QLabel(this); //登录和注册 m_TbnLogin = new PushButton(this); m_label_div = new QLabel(this); m_label_div->setFixedSize(1,16); m_label_div->setStyleSheet("background-color:#FDF7F7"); m_TbnRegister = new PushButton(this); //搜索框 m_search = new SearchLineEdit(this); m_TbnGame = new PushButton(this); //游戏 m_TbnNews = new PushButton(this); //消息通知 m_TbnSkin = new PushButton(this); //皮肤 //创建菜单按钮 m_TbnMenu = new PushButton(this); m_TbnRemote = new PushButton(this); //遥控器 m_TbnMenu_min = new PushButton(this); m_TbnMenu_max = new PushButton(this); m_TbnMenu_close = new PushButton(this); //标题栏布局 m_mainLayout = new QHBoxLayout(this); m_mainLayout->addSpacing(20); m_mainLayout->addWidget(m_labelIcon); m_mainLayout->addSpacing(10); m_mainLayout->addWidget(m_TbnLogin); m_mainLayout->addWidget(m_label_div); m_mainLayout->addWidget(m_TbnRegister); m_mainLayout->addSpacing(220); m_mainLayout->addWidget(m_search); m_mainLayout->addStretch(); m_mainLayout->addWidget(m_TbnGame); m_mainLayout->addWidget(m_TbnNews); m_mainLayout->addWidget(m_TbnSkin); m_mainLayout->addSpacing(10); m_mainLayout->addWidget(m_TbnMenu); m_mainLayout->addWidget(m_TbnRemote); m_mainLayout->addWidget(m_TbnMenu_min); m_mainLayout->addWidget(m_TbnMenu_max); m_mainLayout->addWidget(m_TbnMenu_close); m_mainLayout->addSpacing(6); m_mainLayout->setContentsMargins(0,20,0,0); this->setLayout(m_mainLayout); m_menu = new MyMenu(this); m_TbnMenu->setMenu(m_menu); m_remoteWidget = new RemoteWidget();}//翻译标题栏void TitleWidget::Translator(){ m_menu->translator(); m_TbnLogin->setText(tr("tbn_login")); m_TbnRegister->setText(tr("tbn_register")); m_TbnLogin->setToolTip(tr("login")); m_TbnRegister->setToolTip(tr("register")); m_TbnGame->setToolTip(tr("tbn_game")); m_TbnNews->setToolTip(tr("tbn_news")); m_TbnSkin->setToolTip(tr("tbn_skin")); m_TbnMenu->setToolTip(tr("tbn_menu")); m_TbnRemote->setToolTip(tr("tbn_start_remote")); m_TbnMenu_close->setToolTip(tr("tbn_close")); m_TbnMenu_max->setToolTip(tr("tbn_max")); m_TbnMenu_min->setToolTip(tr("tbn_min"));}
标题栏中有个菜单按钮,主要是子类化QMenu,然后添加各个Action即可:
MainMenu.cpp:
/*************************************************Copyright:kevinAuthor:Kevin LiQiDate:2016-02-12Email:kevinlq0912@163.comQQ:936563422Version:V1.0Description:音乐播放器--主菜单的实现**************************************************/#include "mymenu.h"#include "iconhelper.h"#include <QApplication>#include <QDesktopWidget>#include "Common/menu.h"#include "BottomBar/play_mode_menu.h"#include "aboutkugoudialog.h"MyMenu::MyMenu(QWidget *parent) :Menu(parent){ this->initForm(); this->initWidget(); this->initConnect();}MyMenu::~MyMenu(){}void MyMenu::translator(){ m_playMode->translator(); m_aboutKugou->translator(); m_actionLogin->setText(tr("action_login")); m_menuAddMusic->setTitle(tr("menu_add_music")); m_actionAddLocalMusic->setText(tr("action_add_local_music..")); m_actionAddLocalFolderMusic->setText(tr("action_add_music_local_folder_music")); m_actionMagicRemote->setText(tr("action_magic_remote")); m_actionStripRemote->setText(tr("action_strip_remote")); m_actionHideRemote->setText(tr("action_hide_remote")); m_actionAverageBalance->setText(tr("average_balance")); m_actionMusicPlug->setText(tr("action_music_plug")); m_actiontimingSetting->setText(tr("action_timingSetting")); m_actionAlwaysFront->setText(tr("action_alwaysFront")); m_actionRecoveryStatus->setText(tr("action_recovery")); m_actionAllSpeedDownload->setText(tr("action_all_speed_download")); m_actionCustomDownload->setText(tr("action_custom_download")); m_actionBroadband->setText(tr("action_broadband")); m_actionOnLineUpdate->setText(tr("action_online_update")); m_actionShowTodayRecommend->setText(tr("action_show_today_recommend")); m_actionHelp->setText(tr("action_help")); m_actionSuggest->setText(tr("action_suggest")); m_actionAboutKugou->setText(tr("action_about_kugou")); m_actionSetting->setText(tr("action_setting")); m_actionQuit->setText(tr("action_quit"));}void MyMenu::slotShowAboutKugou(){ m_aboutKugou->exec();}void MyMenu::initForm(){}void MyMenu::initWidget(){ m_actionLogin = new QAction(this); //添加音乐二级菜单 m_menuAddMusic = new Menu(this); m_actionAddLocalMusic = new QAction(m_menuAddMusic); m_actionAddLocalFolderMusic = new QAction(m_menuAddMusic); m_menuAddMusic->addAction(m_actionAddLocalMusic); m_menuAddMusic->addAction(m_actionAddLocalFolderMusic); m_playMode = new Play_Mode_Menu(this); m_playMode->setTitle(tr("play_mode")); //遥控器二级菜单 m_menuRemote = new Menu(this); m_menuRemote->setTitle(tr("menu_remote")); m_actionMagicRemote = new QAction(this); m_actionStripRemote = new QAction(this); m_actionHideRemote = new QAction(this); m_menuRemote->addAction(m_actionMagicRemote); m_menuRemote->addAction(m_actionStripRemote); m_menuRemote->addAction(m_actionHideRemote); m_actionAverageBalance = new QAction(this); m_actionMusicPlug = new QAction(this); m_actiontimingSetting = new QAction(this); m_actionAlwaysFront = new QAction(this); m_actionRecoveryStatus = new QAction(this); //下载设置二级菜单 m_menuDownloadSetting = new Menu(this); m_menuDownloadSetting->setTitle(tr("menu_downloadSetting")); m_actionAllSpeedDownload = new QAction(this); m_actionCustomDownload = new QAction(this); m_actionBroadband = new QAction(this); m_menuDownloadSetting->addAction(m_actionAllSpeedDownload); m_menuDownloadSetting->addAction(m_actionCustomDownload); m_menuDownloadSetting->addAction(m_actionBroadband); //在线更新 m_actionOnLineUpdate = new QAction(this); //显示今日推荐 m_actionShowTodayRecommend = new QAction(this); //帮助与意见反馈二级菜单 m_menuHelp = new Menu(this); m_menuHelp->setTitle(tr("menu_help")); m_actionHelp = new QAction(this); m_actionSuggest = new QAction(this); m_actionAboutKugou = new QAction(this); m_menuHelp->addAction(m_actionHelp); m_menuHelp->addAction(m_actionSuggest); m_menuHelp->addAction(m_actionAboutKugou); m_actionSetting = new QAction(this); m_actionQuit = new QAction(this); m_actionLogin->setIcon(QIcon(":/image/mainMenu/help.png")); m_actionAverageBalance->setIcon(QIcon(":/image/mainMenu/open.png")); m_actionSetting->setIcon(QIcon(":/image/mainMenu/setting.png")); m_actionQuit->setIcon(QIcon(":/image/mainMenu/quit.png")); this->addAction(m_actionLogin); this->addSeparator(); this->addMenu(m_menuAddMusic); this->addMenu(m_playMode); this->addSeparator(); this->addMenu(m_menuRemote); this->addAction(m_actionAverageBalance); this->addAction(m_actionMusicPlug); this->addAction(m_actiontimingSetting); this->addSeparator(); this->addAction(m_actionAlwaysFront); this->addAction(m_actionRecoveryStatus); this->addMenu(m_menuDownloadSetting); this->addAction(m_actionOnLineUpdate); this->addAction(m_actionShowTodayRecommend); this->addMenu(m_menuHelp); this->addAction(m_actionSetting); this->addSeparator(); this->addAction(m_actionQuit); //菜单子功能 m_aboutKugou = new AboutKugouDialog; //关于酷狗}void MyMenu::initConnect(){ connect(m_actionAboutKugou,SIGNAL(triggered(bool)), this,SLOT(slotShowAboutKugou())); connect(m_actionQuit,SIGNAL(triggered(bool)), this,SIGNAL(signal_quit()));}
- 左边工具栏
左边工具栏是继承自QToolButton,然后通过一个垂直布局二实现的:
LeftToolBar.cpp
/*************************************************Copyright:kevinAuthor:Kevin LiQiDate:2016-02-09Email:kevinlq0912@163.comQQ:936563422Version:V1.0Description:音乐播放器---左边工具按钮的实现**************************************************/#include "lefttoolbar.h"#include "iconhelper.h"#include "Common/toolbutton.h"#include <QLabel>#include <QVBoxLayout>LeftToolBar::LeftToolBar(QWidget *parent) : QWidget(parent){ this->initWidget(); this->initForm(); this->initConnect();}void LeftToolBar::traanslator(){ m_tbnLocalList->setToolTip(tr("local_list")); m_tbnNetworkCollect->setToolTip(tr("network_collect")); m_tbnMusicRadio->setToolTip(tr("music_radio")); m_tbnPhoneManage->setToolTip(tr("phone_manaage")); m_tbnLocalMusic->setToolTip(tr("local_music")); m_tbnMore->setToolTip(tr("more"));}void LeftToolBar::initForm(){ this->setMaximumWidth(40); m_tbnLocalList->setIcon(QIcon(":/image/appTools/music_button_playlist.png")); m_tbnNetworkCollect->setIcon(QIcon(":/image/appTools/music_button_cloud.png")); m_tbnMusicRadio->setIcon(QIcon(":/image/appTools/music_button_radio.png")); m_tbnLocalMusic->setIcon(QIcon(":/image/appTools/music_button_mydownl.png")); m_tbnPhoneManage->setIcon(QIcon(":/image/appTools/music_button_mobile.png")); m_tbnMore->setIcon(QIcon(":/image/appTools/music_button_tools.png")); m_vecTbn.push_back(m_tbnLocalList); m_vecTbn.push_back(m_tbnNetworkCollect); m_vecTbn.push_back(m_tbnMusicRadio); m_vecTbn.push_back(m_tbnLocalMusic); m_vecTbn.push_back(m_tbnPhoneManage); m_vecTbn.push_back(m_tbnMore); for (int i = 0; i != m_vecTbn.size();i++) { m_vecTbn.at(i)->setCursor(Qt::ArrowCursor); m_vecTbn.at(i)->setCheckable(true); m_vecTbn.at(i)->setAutoExclusive(true); }}void LeftToolBar::initWidget(){ m_tbnLocalList = new ToolButton(this); m_tbnNetworkCollect = new ToolButton(this); m_tbnMusicRadio = new ToolButton(this); m_tbnPhoneManage = new ToolButton(this); m_tbnLocalMusic = new ToolButton(this); m_tbnMore = new ToolButton(this); this->setButtonStyle(m_tbnLocalList); this->setButtonStyle(m_tbnNetworkCollect); this->setButtonStyle(m_tbnMusicRadio); this->setButtonStyle(m_tbnPhoneManage); this->setButtonStyle(m_tbnLocalMusic); this->setButtonStyle(m_tbnMore); m_mainLayout = new QVBoxLayout(this); m_mainLayout->addSpacing(15); m_mainLayout->addWidget(m_tbnLocalList); m_mainLayout->addWidget(m_tbnNetworkCollect); m_mainLayout->addWidget(m_tbnMusicRadio); m_mainLayout->addWidget(m_tbnPhoneManage); m_mainLayout->addWidget(m_tbnLocalMusic); m_mainLayout->addWidget(m_tbnMore); m_mainLayout->addStretch(); m_mainLayout->setContentsMargins(0,0,10,0); this->setLayout(m_mainLayout);}void LeftToolBar::initConnect(){ connect(m_tbnLocalList,SIGNAL(clicked(bool)), this,SIGNAL(signalLocalList())); connect(m_tbnNetworkCollect,SIGNAL(clicked(bool)), this,SIGNAL(signalNetCollect())); connect(m_tbnMusicRadio,SIGNAL(clicked(bool)), this,SIGNAL(signalMusicRadio())); connect(m_tbnPhoneManage,SIGNAL(clicked(bool)), this,SIGNAL(signalPhoneManage())); connect(m_tbnLocalMusic,SIGNAL(clicked(bool)), this,SIGNAL(signalLocalMusic())); connect(m_tbnMore,SIGNAL(clicked(bool)), this,SIGNAL(signalMoreTool()));}void LeftToolBar::setButtonStyle(ToolButton *tbn){ tbn->setFixedSize(48,50); tbn->setObjectName("leftToolBar");}
- 右边内容区域
右边内容区域就是一个QWidget,暂时设置为背景透明而已,后期还得继续处理! 底部工具栏
底部工具栏主要有上一首、播放/暂停、下一首、播放进度条、收藏、下载、播放模式、声音、播放列表等等组成:
/*************************************************Copyright:kevinAuthor:Kevin LiQiDate:2016-02-09Email:kevinlq0912@163.comQQ:936563422Version:V1.0Description:音乐播放器---底部控制界面**************************************************/#include "bottomwidget.h"#include "iconhelper.h"#include "Common/toolbutton.h"#include "sliderwidget.h"#include "play_mode_menu.h" //播放模式菜单#include <QLabel>#include <QVBoxLayout>#include <QHBoxLayout>#include <QDebug>BottomWidget::BottomWidget(QWidget *parent) :QWidget(parent){ this->initWidget(); this->initForm(); this->initConnect();}BottomWidget::~BottomWidget(){}void BottomWidget::translator(){ m_playMode->translator(); m_tbnPerious->setToolTip(tr("perious_music")); m_tbnNext->setToolTip(tr("nect_music")); m_tbnPlay->setToolTip(tr("play_music")); m_tbnLove->setToolTip(tr("i_love_it")); m_tbnDownload->setToolTip(tr("download_music")); m_tbnSimilarMusic->setToolTip(tr("similar_music")); m_tbnCircleMode->setToolTip(tr("list_circle_model")); m_tbnVoice->setToolTip(tr("no_voice")); m_tbnSoundEffect->setToolTip(tr("snake_effect")); //蝰蛇音效 m_tbnMusicWords->setToolTip(tr("open_desktop_music_words")); //打开桌面歌词 m_label_misic_num->setText("10"); m_labelMusicName->setText(tr("label_music_name")); m_labelMusicTotalTime->setText("00:00"); m_labelMusicCurTime->setText("00:00");}void BottomWidget::initForm(){ this->setMaximumHeight(60);}void BottomWidget::initWidget(){ m_tbnPerious = new ToolButton(); m_tbnPlay = new ToolButton(); m_tbnNext = new ToolButton(); m_tbnLove = new ToolButton(); m_tbnDownload = new ToolButton(); m_tbnSimilarMusic = new ToolButton(); m_tbnCircleMode = new ToolButton(this); m_tbnCircleMode->setObjectName("tbnMenu"); m_playMode = new Play_Mode_Menu(this); m_playMode->setObjectName("MenuplayMode"); m_tbnCircleMode->setMenu(m_playMode); m_tbnVoice = new ToolButton(); m_tbnSoundEffect = new ToolButton(); m_tbnMusicWords = new ToolButton(); m_tbnMusicPlayQueue = new ToolButton(); m_label_misic_num = new QLabel(this); m_label_misic_num->setObjectName("whitelabel"); m_label_misic_num->setStyleSheet("color:rgb(255,255,255)"); //歌曲信息标签 m_labelMusicName = new QLabel(this); m_labelMusicName->setObjectName("whitelabel"); m_labelMusicTotalTime = new QLabel(this); m_labelMusicTotalTime->setObjectName("whitelabel"); QLabel *label_music_time_div = new QLabel(this); label_music_time_div->setText("/"); label_music_time_div->setObjectName("whitelabel"); m_labelMusicCurTime = new QLabel(this); m_labelMusicCurTime->setObjectName("whitelabel"); m_sliderWidget = new SliderWidget(); //播放进度条 m_MusicInfoLayout = new QHBoxLayout; m_MusicInfoLayout->addWidget(m_labelMusicName); m_MusicInfoLayout->addStretch(); m_MusicInfoLayout->addWidget(m_labelMusicCurTime); m_MusicInfoLayout->addWidget(label_music_time_div); m_MusicInfoLayout->addWidget(m_labelMusicTotalTime); m_MusicInfoLayout->setContentsMargins(0,0,0,0); QVBoxLayout *MusicLayout = new QVBoxLayout(); MusicLayout->addLayout(m_MusicInfoLayout); MusicLayout->addWidget(m_sliderWidget); MusicLayout->setContentsMargins(0,0,0,0); m_mainLayout = new QHBoxLayout(this); m_mainLayout->addSpacing(25); m_mainLayout->addWidget(m_tbnPerious); m_mainLayout->addSpacing(5); m_mainLayout->addWidget(m_tbnPlay); m_mainLayout->addSpacing(5); m_mainLayout->addWidget(m_tbnNext); //m_mainLayout->addStretch(); m_mainLayout->addLayout(MusicLayout); m_mainLayout->addWidget(m_tbnLove); m_mainLayout->addWidget(m_tbnDownload); m_mainLayout->addWidget(m_tbnSimilarMusic); m_mainLayout->addWidget(m_tbnCircleMode); m_mainLayout->addWidget(m_tbnVoice); m_mainLayout->addWidget(m_tbnSoundEffect); m_mainLayout->addWidget(m_tbnMusicWords); m_mainLayout->addWidget(m_tbnMusicPlayQueue); m_mainLayout->addWidget(m_label_misic_num); m_mainLayout->addSpacing(20); m_mainLayout->setContentsMargins(0,10,0,20); setLayout(m_mainLayout);}//信号和槽的关联void BottomWidget::initConnect(){ connect(m_tbnPerious,SIGNAL(clicked(bool)), this,SIGNAL(signalPreious())); connect(m_tbnPlay,SIGNAL(clicked(bool)), this,SIGNAL(signalPlay())); connect(m_tbnNext,SIGNAL(clicked(bool)), this,SIGNAL(signalNext())); //循环模式信号和槽连接 connect(m_tbnCircleMode,SIGNAL(clicked(bool)), m_playMode,SLOT(slotMenuVisiable()));}
以上就是各个界面的详细代码,在主界面中,将各个子界面按照一定的布局方式进行布局即可。
//初始化界面void MusicWidget::initWidget(){ m_title = new TitleWidget(this); //标题栏 m_title->installEventFilter(this); //标题栏安装事件监听器,识别鼠标的双击 m_midWidget = new MidWidget(this); //中间内容 m_bottom = new BottomWidget(this); //底部工具栏 m_leftToolBar = new LeftToolBar(this); //左边工具按钮 m_midLayout = new QHBoxLayout(); m_midLayout->addWidget(m_leftToolBar); m_midLayout->addWidget(m_midWidget); m_midLayout->setContentsMargins(2,0,0,0); m_maintLayout = new QVBoxLayout(this); m_maintLayout->addWidget(m_title); m_maintLayout->addLayout(m_midLayout); m_maintLayout->addWidget(m_bottom); m_maintLayout->setContentsMargins(0,0,0,0); this->setLayout(m_maintLayout);}
以上就是酷狗音乐界面的大致结构,以后会抽时间继续完善。
技术在于交流、分享……博客地址:http://blog.csdn.net/u013704336\Email:kevinlq0912@163.comQQ:936563422
9 0
- 酷狗音乐模仿还在继续
- 酷狗音乐模仿还在继续之UI界面源码下载
- 开发还在继续
- 生活还在继续
- 生活还在继续!
- 生活还在继续。。。。。。
- 生活还在继续
- Qt/C++ 模仿 酷狗音乐播放器Qt/C++ 模仿 酷狗音乐播放器
- 牙还在继续疼......
- 伤心还在继续,怎么办
- 一切都还在继续
- 音乐还在陪伴我
- Qt/C++ 模仿 酷狗音乐播放器
- Facebook的规模还在继续扩大
- silverlight的生命还在继续
- 大学还在继续,我的人生我买单
- 深度学习-开源框架了解(还在继续)
- 生活还得继续
- HTTP状态码
- PHP进阶:写入内容到文件
- ubuntu下安装交叉编译工具链的方法总结
- Android必知必会-使用okhttp的PUT方式上传文件
- phpmyadmin安装教程及配置设置
- 酷狗音乐模仿还在继续
- CUDA和GPU介绍及两者之间的关系
- javascript算法与数据结构之栈
- 初识HTML
- OpenCV笔记1---报错 cv::Exception,更改路径后问题解决。
- 嵌入式C语言笔试题
- 存储过程详解
- iOS开发-网络请求
- 检测当前的浏览器是pc端还是移动端