QT项目 -仿QQ音乐的音乐播放器(第五节)

目录

一、CommonPage界⾯设置和显示

二、自定义ListItemBox

 三、支持hover效果

四、自定义VolumeTool

五、界面设置

六、页面创建及弹出

七、绘制三角


一、CommonPage界面设置和显示


void CommonPage::setCommonPageUI(const QString &title, const QString &image)
{ui->pageTittle->setText(title);ui->musicImageLabel->setPixmap(QPixmap(image));ui->musicImageLabel->setScaledContents(true);//setScaledContents(true)可以使图片自适应控件的大小
}

 然后在qqmusic.cpp中的初始化函数中加:

void QQMusic::initUI()
{ui->likepage->setCommonPageUI("我喜欢", ":/images/ilikebg.png");ui->localPage->setCommonPageUI("本地⾳乐", ":/images/localbg.png");ui->recentPage->setCommonPageUI("最近播放", ":/images/recentbg.png");
}

小知识:

QT中设置图片和文字的方法:

图片

ui->具体的QLabel->setPixmap(QPixmap(QString的地址));

文字

ui->具体的QLabel->setText(QString的内容);

例如

ui->btIcon->setPixmap(QPixmap(btIcon));
ui->btText->setText(content);

二、自定义ListItemBox

设置好如下格式:

 UI格式:

likeBtn:#likeBtn
{border:none;
}VIPLabel:#VIPLabel
{border:1px solid #1ECD96;
color:#1ECD96;
border-radius:2px;
}SQLabel:#SQLabel
{
border:1px solid #FF6600;
color:#FF6600;
border-radius:2px;
}

测试调用: 

void CommonPage::setCommonPageUI(const QString &title, const QString &image)
{ui->pageTittle->setText(title);ui->musicImageLabel->setPixmap(QPixmap(image));ui->musicImageLabel->setScaledContents(true);//setScaledContents(true)可以使图片自适应控件的大小ListItemBox*listItemBox=new ListItemBox(this);QListWidgetItem*listWidgetItem=new QListWidgetItem(ui->pageMusicList);listWidgetItem->setSizeHint(QSize(ui->pageMusicList->width(),45));ui->pageMusicList->setItemWidget(listWidgetItem,listItemBox);}

这里的QListWidgetItem是创建ListWidget的一行

setItemWidge是将listItemBox加入到listWidgetItem中进行绑定

结果:

 三、支持hover效果

listitembox中的hover效果

// listitembox.h 新增
protected:void enterEvent(QEvent *event);void leaveEvent(QEvent *event);// listitembox.cpp 新增
void ListItemBox::enterEvent(QEvent *event)
{(void)event;setStyleSheet("background-color:#EFEFEF");
}
void ListItemBox::leaveEvent(QEvent *event)
{(void)event;setStyleSheet("");
}

四、自定义VolumeTool

① 生成⼀个QT设计师界面,objectName命名为VolumeTool,geometry的宽⾼修改为100*350。
② 拖拽⼀个Widget到VolumeTool中,objectName修改为volumeWidget,geometry修改为:
[(10,10), 80*300]
拖拽⼀个QPushButton到volumeWidget,objectName修改为silenceBtn,mimimumSize和
maximumSize的宽⾼ 修改为80*45
拖拽⼀个QLabel到volumeWidget,objectName修改为volumeRatio,mimimumSize和
maximumSize的高修改为30,QLabel的alignment属性修改为水平和垂直居中。
拖拽⼀个QWidget到volumeWidget,objectName修改为sliderBox。geometry修改为:[(0,0),
80*225]
③ sliderBox内部:
拖拽⼀个QFrame,objectName修改为inSlider,geometry修改为[(38, 25), 4*180]。
拖拽⼀个QFrame,objectName修改为outSlider,geometry修改为[(38, 25), 4*180]。
拖拽⼀个QPushButton,objectName修改为sliderBtn,geometry修改为[(33, 20), 14*14],
mimimumSize和 maximumSize的宽高14*14。

适当修改格式:

五、界面设置

在volumetool.cpp中:

#include "volumetool.h"
#include "ui_volumetool.h"
#include <QGraphicsDropShadowEffect>VolumeTool::VolumeTool(QWidget *parent): QWidget(parent), ui(new Ui::VolumeTool)
{ui->setupUi(this);setWindowFlags(Qt::Popup | Qt::FramelessWindowHint| Qt::NoDropShadowWindowHint);// 在windows上,设置透明效果后,窗⼝需要加上Qt::FramelessWindowHint格式// 否则没有控件位置的背景是⿊⾊的// 由于默认窗⼝有阴影,因此还需要将窗⼝的原有的阴影去掉,窗⼝需要加上Qt::NoDropShadowWindowHintsetAttribute(Qt::WA_TranslucentBackground);// ⾃定义阴影效果QGraphicsDropShadowEffect* shadowEffect = new QGraphicsDropShadowEffect(this);shadowEffect->setOffset(0, 0);shadowEffect->setColor("#646464");shadowEffect->setBlurRadius(10);setGraphicsEffect(shadowEffect);// 给按钮设置图标ui->silenceBtn->setIcon(QIcon(":/images/volumn.png"));// ⾳量的默认⼤⼩是20ui->outSlider->setGeometry(ui->outSlider->x(), 180 - 36 - 25, ui->outSlider->width(), 20);ui->sliderBtn->move(ui->sliderBtn->x(), ui->outSlider->y() - ui->sliderBtn->height()/2);ui->volumeRatio->setText("20%");
}VolumeTool::~VolumeTool()
{delete ui;
}

setIcon是设置按钮图标的函数

六、页面创建及弹出

⾳量调节属于主界面上元素,因此在QQMusic类中需要添加VolumeTool的对象,在initUi中new该类 的对象。 主界面中⾳量调节按钮添加clicked槽函数。
// qqmusic.h中新增
#include "volumetool.h"
VolumeTool* volumeTool;// qqmusic.cpp中新增
void QQMusic::initUi()
{
// ...
// 创建⾳量调节窗⼝对象并挂到对象树
volumeTool = new VolumeTool(this);
}void QQMusic::on_volume_clicked()
{
// 先要调整窗⼝的显⽰位置,否则该窗⼝在主窗⼝的左上⻆// 1. 获取该按钮左上⻆的图标QPoint point = ui->volume->mapToGlobal(QPoint(0,0));// 2. 计算volume窗⼝的左上⻆位置// 让该窗⼝显⽰在⿏标点击的正上⽅// ⿏标位置:减去窗⼝宽度的⼀半,以及⾼度恰巧就是窗⼝的左上⻆QPoint volumeLeftTop = point - QPoint(volumeTool->width()/2, volumeTool->height());// 微调窗⼝位置volumeLeftTop.setY(volumeLeftTop.y()+30);volumeLeftTop.setX(volumeLeftTop.x()+15);// 3. 移动窗⼝位置volumeTool->move(volumeLeftTop);// 4. 将窗⼝显⽰出来volumeTool->show();
}

七、绘制三角

// volumetool.h中新增
void paintEvent(QPaintEvent *event);// volumetool.cpp中新增
#include <QPainter>void VolumeTool::paintEvent(QPaintEvent *event)
{(void)event;// 1. 创建绘图对象QPainter painter(this);// 2. 设置抗锯⻮painter.setRenderHint(QPainter::Antialiasing, true);// 3. 设置画笔// 没有画笔时:画出来的图形就没有边框和轮廓线painter.setPen(Qt::NoPen);// 4. 设置画刷颜⾊painter.setBrush(Qt::white);// 创建⼀个三⻆形QPolygon polygon;polygon.append(QPoint(30, 300));polygon.append(QPoint(70, 300));polygon.append(QPoint(50, 320));// 绘制三⻆形painter.drawPolygon(polygon);
}

效果展示:

大家多多支持~一键三连~~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/92821.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/92821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wstool和git submodule优劣势对比

wstool 和 git submodule 都可以用来管理项目中的外部源代码依赖&#xff0c;但它们的设计理念、工作流程和适用场景有很大不同。 我们来深入对比一下它们的优势和劣势。 核心理念比喻 git submodule&#xff1a;像是在你的汽车设计图纸中&#xff0c;直接嵌入了另一家公司&…

六、RuoYi-Cloud-Plus OSS文件上传配置

1.前面我们完成了RuoYi-Cloud-Plus 部署及启动&#xff0c;此刻已经可以正常访问。 前面文章的专栏内容在这&#xff0c;感兴趣可以看看。 https://blog.csdn.net/weixin_42868605/category_13023920.html 2.但现在虽然已经启动成功&#xff0c;但有很多功能我们依旧用不了&a…

达梦数据库日常运维命令

查询数据库表空间数据文件使用大小限制DECLARE K INT:(SELECT cast(PAGE()/1024 as varchar)); BEGIN SELECTF."PATH" 数据文件 ,F.CLIENT_PATH,G.NAME 所属表空间,F.MAX_SIZE||M 文件扩展限制,(CASE F.AUTO_EXTEND WHEN 1 THEN 是 ELSE 否 END) 文件…

使用线性降维方法进行数据降维

在数据科学与机器学习的领域中&#xff0c;维度灾难问题经常导致模型的性能下降。线性降维方法是一种常见的技术&#xff0c;用于在保留尽可能多的原始数据特征的同时&#xff0c;减少数据集的维度。这些方法通过将高维数据映射到低维空间来减少特征数量&#xff0c;从而加速模…

OpenCV图像裁剪与 ROI 操作

在图像处理领域&#xff0c;ROI&#xff08;Region of Interest&#xff09;区域感兴趣操作是非常基础而重要的一环。无论是进行目标检测、图像分割&#xff0c;还是简单的图像处理&#xff0c;都离不开对图像某一区域的选取与处理。本文将结合 OpenCV 的 C 接口&#xff0c;详…

关于AI应用案例计算机视觉、自然语言处理、推荐系统和生成式AI四大领域的详细技术分析。

一、计算机视觉应用&#xff1a;实时物体检测 案例描述&#xff1a;使用YOLOv8模型实现实时物体检测系统&#xff0c;应用于安防监控场景。 1. 代码示例&#xff08;Python&#xff09; python from ultralytics import YOLO import cv2# 加载预训练模型 model YOLO("…

各个网络层拥有的协议简写

OSI 七层模型&#xff08;从下到上分别为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层&#xff09;是网络通信的经典理论框架&#xff0c;每层都有其核心功能和对应的协议。以下是各层的主要协议列举&#xff1a;1. 物理层&#xff08;Physical Layer&#xff…

django基于Python的设计师作品平台的数据可视化系统设计与实现

django基于Python的设计师作品平台的数据可视化系统设计与实现

等保测评-RabbitMQ中间件

RabbitMQ-docker部署查看版本&#xff1a;rabbitmqctl version、rabbitmqctl status | grep version配置文件&#xff1a;一般为rabbitmq.conf端口号&#xff1a;一般为15672一、身份鉴别a&#xff09;应对登录的用户进行身份标识和鉴别&#xff0c;身份标识具有唯一性&#xf…

Linux操作系统从入门到实战(十六)冯诺依曼体系结构,操作系统与系统调用和库函数概念

Linux操作系统从入门到实战&#xff08;十六&#xff09;冯诺依曼体系结构&#xff0c;操作系统与系统调用和库函数概念前言一、冯诺依曼体系结构1. 冯诺依曼体系是什么&#xff1f;2. 核心部件有哪些&#xff1f;3. 数据是怎么跑的&#xff1f;4. 发文件的流程也一样5. 为什么…

广东省省考备考(第七十二天8.10)——言语理解与表达、判断推理(强化训练)

小模考&#xff08;言语、常识&#xff09; 错题解析 本题可从第二空入手。转折前后语意相反&#xff0c;转折前指出“投资对经济拉动只能发挥短期的作用”&#xff0c;故转折后应表达“最终消费对经济拉动才能发挥长期的作用”。A项“持久”、D项“长期”均符合文意&#xff0…

数据库删除术:逻辑删除 vs 物理删除,选错毁所有

你以为删除数据就是点个按钮&#xff1f;背后藏着数据安全的生死抉择&#xff01; 本文揭秘两种删除方式的本质区别&#xff0c;用真实案例教你避免灾难性数据丢失。一、删除的本质:数据消失的两种方式 &#x1f9ea; #mermaid-svg-pVylRd9e5p4VE5G0 {font-family:"trebuc…

【Python 小脚本·大用途 · 第 3 篇】

1. 痛点 100 字 硬盘里散落着 IMG_2024(1).jpg、IMG_2024(1) (1).jpg、下载目录里同名但大小不同的视频…… 手动比对既耗时又容易误删。今天用 30 行 Python 脚本&#xff0c;基于「内容哈希」一键找出并删除重复文件&#xff0c;支持多目录递归、白名单、空目录清理。2. 脚本…

【网络与爬虫 52】Scrapyd-k8s集群化爬虫部署:Kubernetes原生分布式爬虫管理平台实战指南

关键词: Scrapyd-k8s, Kubernetes爬虫部署, 容器化爬虫管理, 云原生数据采集, 分布式爬虫集群, Docker爬虫, K8s工作负载, Scrapy部署自动化 摘要: 本文深入解析Scrapyd-k8s这一革命性的Kubernetes原生爬虫管理平台&#xff0c;通过费曼学习法从传统部署痛点出发&#xff0c;详…

Spring WebSocket安全认证与权限控制解析

一、认证架构设计 1.1 WebSocket安全认证流程 #mermaid-svg-23pyTyZe6teZy3Hg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-23pyTyZe6teZy3Hg .error-icon{fill:#552222;}#mermaid-svg-23pyTyZe6teZy3Hg .error-t…

复现论文《多无人机协同任务分配算法设计与实现》

1. 论文标题 多无人机协同任务分配算法设计与实现 The Design and Implementation of Multi-UAVs Cooperative Task Assignment Algorithm 2. 内容概括 该论文针对异构多无人机协同执行多目标多类型任务时的分配问题展开研究。首先提出“两阶段”任务分配结构:第一阶段通过…

MCU-基于TC397的启动流程

TC397的启动流程(Start Sequence) 整体启动流程包括固件启动(Boot Firmware)和 Bootloader 和软件启动(Application start-up software)三个阶段。 1. Boot Firmware:是芯片上电后最开始执行的代码,代码由英飞凌供应商固化在BootRom中的,不可编程,没办法对BootRom中的…

单片机毕业设计模板|毕设答辩|毕业设计项目|毕设设计|单片机物联网毕业设计|基于STM32单片机的纱管图像识别系统设计

毕业设计题目&#xff1a;基于STM32单片机的纱管图像识别系统设计1. 需求分析目标用户&#xff1a;纺织行业&#xff0c;自动化生产线&#xff0c;质量检测等。核心功能&#xff1a;实时识别和检测纱管的外观缺陷&#xff08;如破损、色差等&#xff09;。提供数据记录和报告功…

谷歌DeepMind发布Genie 3:通用型世界模型,可生成前所未有多样化的交互式虚拟环境

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

202506 电子学会青少年等级考试机器人二级理论综合真题

更多内容和历年真题请查看网站&#xff1a;【试卷中心 -----> 电子学会 ----> 机器人技术 ----> 二级】 网站链接 青少年软件编程历年真题模拟题实时更新 2025年6月 青少年等级考试机器人理论真题二级 第 1 题 如图&#xff0c;这是中国古代发明的指南车模型&am…