Qt-网易云音乐界面实现-3 音乐名片模块的实现

简介: Qt-网易云音乐界面实现-3 音乐名片模块的实现

image.png

这个模块其实我是不知道该叫什么的,暂时就叫做音乐名片模块吧,这可以看到,这个模块简单的显示以下信息。

1. 歌曲名称

2. 歌曲歌唱者

3. 歌曲封面

4. 喜欢歌曲的按钮

5. 分享歌曲的按钮

6. 全屏显示歌曲信息的按钮(在歌曲封面上面)

看下对比图

image.png

正版的动图有点大了,演示不了了,大家可以自己体验一下网易云音乐的这个动作。


下面说说我是怎么实现这个小小的音乐名牌的。


1. 歌曲名称 就是一个简单的label,这里还没有处理完成,只是简单的设置了样式,但是没有做字符超长检测,在后面会加上


2. 歌手信息,同一


3 歌曲封面,就是在一个label上面放个图片


4 喜欢按钮,就是普通的pushbutton,不过是两套资源


5 分享按钮,普通的pushbutton按钮


6 全屏显示按钮,普通的pushbutton按钮,只不过默认的资源的透明


上下这个音乐模块的代码。

#ifndef MUSICFORM_H
#define MUSICFORM_H
#include <QWidget>
#include <QPainter>
#include <QPaintEvent>
#include <QPushButton>
namespace Ui {
class MusicForm;
}
class MusicForm : public QWidget
{
    Q_OBJECT
public:
    explicit MusicForm(QWidget *parent = 0);
    ~MusicForm();
    void set_Music_Picture(QString picPath);
protected slots:
    void slot_show_Normal();
signals:
    void full_show(bool full_show_state);       //音乐模块全屏显示
protected:
    void paintEvent(QPaintEvent* event);
private slots:
    void on_pushButton_music_picture_clicked();
    void on_pushButton_like_clicked();
    void on_pushButton_share_clicked();
private:
    Ui::MusicForm *ui;
    bool music_Like_State = false;
    bool full_Show_State = false;
    QPushButton *btn_Show_Normal = NULL;
};
#endif // MUSICFORM_H
#include "musicform.h"
#include "ui_musicform.h"
/*
 * 构造函数
 */
MusicForm::MusicForm(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MusicForm)
{
    ui->setupUi(this);
    if(music_Like_State == false)
    {
        ui->pushButton_like->setStyleSheet("QPushButton{border-image:url(images/musicform/btn_like_n.png);}"
                                           "QPushButton::hover{border-image:url(images/musicform/btn_like_h.png);}"
                                           "QPushButton::pressed{border-image:url(images/musicform/btn_like_n.png);}");
    }
}
MusicForm::~MusicForm()
{
    delete ui;
}
/*
 * 这是音乐头像
 */
void MusicForm::set_Music_Picture(QString picPath)
{
    QString qss = "QLabel{border-image:url("+picPath+");}";
    ui->label_music_picture->setStyleSheet(qss);
}
/*
 * 正常显示,把我的按钮还给我
 */
void MusicForm::slot_show_Normal()
{
    emit full_show(false);
    ui->label_music_singer->show();
    ui->label_music_name->show();
    ui->label_music_picture->show();
    ui->pushButton_like->show();
    ui->pushButton_music_picture->show();
    ui->pushButton_share->show();
    btn_Show_Normal->hide();
}
/*
 * 绘制背景函数
 */
void MusicForm::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);
    QPainter painter_mainback(this);
    painter_mainback.setPen(Qt::NoPen);
    painter_mainback.setBrush(QColor(25,27,31));
    painter_mainback.drawRect(0,0,this->width(),this->height());
}
/*
 * 全屏按钮按下
 */
void MusicForm::on_pushButton_music_picture_clicked()
{
    if(full_Show_State == false)
    {
        emit full_show(true);
        ui->label_music_singer->hide();
        ui->label_music_name->hide();
        ui->label_music_picture->hide();
        ui->pushButton_like->hide();
        ui->pushButton_music_picture->hide();
        ui->pushButton_share->hide();
        if(btn_Show_Normal == NULL)
        {
            btn_Show_Normal = new QPushButton(this);
            btn_Show_Normal->setGeometry(50,50,100,100);
            btn_Show_Normal->setText("缩回去");
            btn_Show_Normal->show();
            connect(btn_Show_Normal,&QPushButton::clicked,this,&MusicForm::slot_show_Normal);
        }
        else
        {
            btn_Show_Normal->setGeometry(50,50,100,100);
            btn_Show_Normal->setText("缩回去");
            btn_Show_Normal->show();
        }
    }
}
/*
 * 喜欢按钮
 */
void MusicForm::on_pushButton_like_clicked()
{
    if(music_Like_State == false)
    {
        music_Like_State = true;
        ui->pushButton_like->setStyleSheet("QPushButton{border-image:url(images/musicform/btn_unlike_n.png);}"
                                           "QPushButton::hover{border-image:url(images/musicform/btn_unlike_h.png);}"
                                           "QPushButton::pressed{border-image:url(images/musicform/btn_unlike_n.png);}");
    }
    else
    {
        music_Like_State = false;
        ui->pushButton_like->setStyleSheet("QPushButton{border-image:url(images/musicform/btn_like_n.png);}"
                                           "QPushButton::hover{border-image:url(images/musicform/btn_like_h.png);}"
                                           "QPushButton::pressed{border-image:url(images/musicform/btn_like_n.png);}");
    }
}
/*
 * 分享按钮
 */
void MusicForm::on_pushButton_share_clicked()
{
}

以上分别为音乐模块的头文件和cpp,其中还有部分接口没有流出来,等后期有机会实现其功能的时候在做接口。

在主窗口中,主要有两部分功能,

1. 创建这个音乐模块

2. 改变音乐模块的显示方式

代码如下

//初始化音乐模块
    musicform = new MusicForm(this);
    connect(musicform,&MusicForm::full_show,this,&MainWindow::slot_musicform_resize);
    musicform->setGeometry(0,565,200,55);
    musicform->set_Music_Picture("./images/pretty_girl.png");
    musicform->show();
/*
 * 改变音乐模块显示方式
 */
void MainWindow::slot_musicform_resize(bool full_show_state)
{
    if(full_show_state == true)
    {
        if(musicform != NULL)
        {
            musicform->setGeometry(0,50,1022,570);
        }
    }
    else
    {
        if(musicform != NULL)
        {
            musicform->setGeometry(0,565,200,55);
        }
    }
}

最后附上今天用到的QSS

1./*音乐模块全屏按钮*/
QPushButton#pushButton_music_picture
{
  border-image:url(images/musicform/btn_music_picture_n.png);
}
QPushButton::hover#pushButton_music_picture
{
  border-image:url(images/musicform/btn_music_picture_h.png);
}
QPushButton::pressed#pushButton_music_picture
{
  border-image:url(images/musicform/btn_music_picture_n.png);
}
/*音乐模块分享按钮*/
QPushButton#pushButton_share
{
  border-image:url(images/musicform/btn_share_n.png);
}
QPushButton::hover#pushButton_share
{
  border-image:url(images/musicform/btn_share_h.png);
}
QPushButton::pressed#pushButton_share
{
  border-image:url(images/musicform/btn_share_n.png);
}
/*音乐模块歌名*/
QLabel#label_music_name
{
  color: rgb(255, 255, 255);
}
/*音乐模块歌词*/
QLabel#label_music_singer
{
  color: rgb(102, 102, 102);
}
/*主窗口分割条*/
QLabel#label_part
{
  border-image:url(images/lable_part.png);
}
目录
相关文章
|
3月前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
89 0
|
1月前
|
编译器
【项目开发】QT简单练习之QQ登录界面模仿
为了进一步加深对QT开发的理解,在学习完基础操作之后要进行一个简单的练习。
|
2月前
|
编解码 开发工具 UED
QT Widgets模块源码解析与实践
【9月更文挑战第20天】Qt Widgets 模块是 Qt 开发中至关重要的部分,提供了丰富的 GUI 组件,如按钮、文本框等,并支持布局管理、事件处理和窗口管理。这些组件基于信号与槽机制,实现灵活交互。通过对源码的解析及实践应用,可深入了解其类结构、布局管理和事件处理机制,掌握创建复杂 UI 界面的方法,提升开发效率和用户体验。
165 12
|
6月前
|
区块链
【qt】最快的开发界面效率——混合编程3
【qt】最快的开发界面效率——混合编程
101 1
|
6月前
【qt】最快的开发界面效率——混合编程2
【qt】最快的开发界面效率——混合编程
80 1
|
6月前
【qt】设计器实现界面
【qt】设计器实现界面
52 1
|
6月前
|
搜索推荐
【qt】自定义界面类
【qt】自定义界面类
57 0
|
6月前
【qt】最快的开发界面效率——混合编程1
【qt】最快的开发界面效率——混合编程
81 0
|
4月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
181 1
Qt(C++)开发一款图片防盗用水印制作小工具
|
2月前
|
开发工具 C++
qt开发技巧与三个问题点
本文介绍了三个Qt开发中的常见问题及其解决方法,并提供了一些实用的开发技巧。

推荐镜像

更多