基于qt和css的MP3音乐播放器引擎开发

1

QMainWindow:
QMainWindow 是用于创建应用程序主窗口的类。它通常用于具有菜单栏、工具栏、状态栏等标准组件的窗口。
QMainWindow 提供了一种框架,用于组织和管理应用程序的用户界面元素。它可以包含其他小部件(widgets)和布局管理器(layout managers),如中心部件(central widget)、dock 窗口(dock widgets)等。
QDialog:
QDialog 是一个对话框窗口的基类。对话框通常用于临时交互,例如消息框、文件对话框、设置对话框等。
QDialog 提供了对话框的标准外观和行为,包括窗口标题、按钮、标签等。它可以用于创建自定义对话框,也可以用作其他对话框类的基类。
QWidget:
QWidget 是 Qt 中所有用户界面组件的基类。它提供了绘制、事件处理、布局等功能,是其他所有用户界面组件的基础。
QWidget 可以独立存在,也可以嵌入到其他容器中,如窗口、对话框、布局等。它是所有可视化组件的基础,包括按钮、文本框、标签等。
总的来说,QMainWindow 用于创建主窗口应用程序,QDialog 用于创建对话框窗口,而 QWidget 则是所有用户界面组件的基类,可以用于创建各种自定义的用户界面元素。

2

QPaintEvent是Qt框架中的一个事件类,用于绘制部件(widget)的内容。当一个部件需要重新绘制自己时,通常会触发一个QPaintEvent事件。
在处理QPaintEvent时,通常会在部件的绘制事件处理函数中进行绘制操作。这通常是在部件类的paintEvent函数中完成的,例如:

void MyWidget::paintEvent(QPaintEvent *event) {// 在这里进行绘制操作
}

在paintEvent函数中,您可以使用Qt提供的绘制工具(如QPainter)来绘制各种图形、文本和图像等内容。您可以在部件的绘制区域上绘制任何您想要的内容,以实现自定义的绘制效果。

例如,以下是一个简单的例子,演示了如何在部件的绘制区域上绘制一个矩形:

void MyWidget::paintEvent(QPaintEvent *event) {// 创建绘图对象QPainter painter(this);// 设置画笔和画刷painter.setPen(Qt::black);painter.setBrush(Qt::red);// 绘制矩形painter.drawRect(10, 10, 100, 100);
}

在这个例子中,我们在部件的绘制区域上绘制了一个红色矩形,左上角坐标为(10, 10),宽度为100,高度为100。
通过处理QPaintEvent事件,并在paintEvent函数中进行绘制操作,可以实现自定义的绘制效果,以满足需求。

3

qPainter.drawPixmap(0,0,width(),height(),QPixmap(":/new/prefix1/ResImages/MBGMusicplayer_ui2.jpg"));

让我们逐步解释这行代码的含义:
qPainter: 这是一个QPainter对象,用于在绘制设备上进行绘制操作。
drawPixmap: 这是QPainter类的一个方法,用于在绘图设备上绘制一个图像。
(0, 0): 这是要绘制图像的起始坐标,通常是左上角的坐标。
width(): 这是调用该代码的部件(可能是窗口或其他部件)的宽度。width()方法返回部件的宽度。
height(): 这是调用该代码的部件的高度。height()方法返回部件的高度。
QPixmap(“:/new/prefix1/ResImages/MBGMusicplayer_ui2.jpg”): 这是要绘制的图像。QPixmap类表示一个图像,(“:/new/prefix1/ResImages/MBGMusicplayer_ui2.jpg”)是图像文件的路径(可能是Qt资源文件路径),通过该路径加载图像。
因此,这行代码的作用是在调用该代码的部件上绘制指定路径的图像,起始坐标为(0, 0),绘制的大小与部件的大小相匹配。

QPainter qPainter(this);

通过将this传递给QPainter构造函数,您告诉Qt将绘图操作应用于当前的部件,即MainWindow

4

styleSheet
设置透明背景
font-size:14px;
color: rgb(255,255,255);
background-color: rgba(255,255,255,50);
这组CSS规则是用于设置按钮的样式,其中包括文字大小、文字颜色和背景颜色。让我解释一下每个属性的含义:
font-size: 14px;: 这指定了按钮文本的字体大小为14像素。
color: rgb(255, 255, 255);: 这指定了按钮文本的颜色为白色。使用了RGB表示法,RGB(255, 255, 255)代表白色。
background-color: rgba(255, 255, 255, 50);: 这指定了按钮的背景颜色为白色,同时设置了透明度为50%。这里使用了RGBA表示法,其中A代表Alpha通道,控制了颜色的透明度。RGBA(255, 255, 255, 50)表示白色并且透明度为50%。
请注意,透明度值介于0和255之间,0代表完全透明,255代表完全不透明。因此,50%的透明度对应的值是约127(255的一半)

5

控件透明化
styleSheet
QPushButton{
background-repeat:no-repeat;
background-position:center center;
border:none;
color:white;
}
QPushButton:hover{
background-repeat:no-repeat;
background-position:center center;
}
QPushButton:press{
background-repeat:no-repeat;
background-position:center center;
}
提供的是一组用于设置QPushButton样式的CSS规则。让我逐一解释它们:
QPushButton: 这是用于设置QPushButton默认状态的样式规则。它会影响所有普通状态下的QPushButton。
background-repeat: no-repeat;: 这指定了背景图像不应重复。
background-position: center center;: 这将背景图像定位于按钮的中心。
border: none;: 这指定了按钮的边框样式为无。
color: white;: 这指定了按钮文本的颜色为白色。
QPushButton:hover: 这是用于设置QPushButton在鼠标悬停时的样式规则。它会影响按钮在鼠标悬停时的外观。
background-repeat: no-repeat;: 这指定了背景图像不应重复。
background-position: center center;: 这将背景图像定位于按钮的中心。
QPushButton:press: 这是用于设置QPushButton在按下时的样式规则。它会影响按钮在按下时的外观。
background-repeat: no-repeat;: 这指定了背景图像不应重复。
background-position: center center;: 这将背景图像定位于按钮的中心。

6

定时器去边框
lineWidth调成0

groupbox白色
QGroupBox
{
font-size:14px;
color:white
}

7

这段代码是用于设置两个水平滑动条(horizontalSlider_PlayProgress 和 horizontalSlider_Volume)的样式。让我解释一下每个部分的含义:
QSlider::groove:horizontal: 这部分定义了滑动条轨道的样式,包括边框、背景颜色、高度和边框半径等。
QSlider::handle:horizontal: 这部分定义了滑块的样式,包括背景渐变、宽度、边框半径以及上下的边距。
horizontalSlider::sub-page:horizontal: 这部分定义了滑动条已填充部分的样式,包括背景颜色、边距和边框半径。
在这段代码中,滑动条轨道和滑块的样式设置是相同的,都是蓝色边框和蓝色背景,而滑块使用了径向渐变作为背景。已填充部分的样式为红色背景。
说明每个部分的作用:

ui->horizontalSlider_PlayProgress->setStyleSheet(

这行代码开始设置水平滑动条 horizontalSlider_PlayProgress 的样式。

"QSlider::groove:horizontal {"
"border:1px solid skyblue;"
"background-color:skyblue;"
"height:10px;"
"border-radius:5px;"
"}"

这段代码定义了滑动条轨道的样式。具体来说:

border:1px solid skyblue;:设置轨道的边框为1像素宽的天蓝色。
background-color:skyblue;:设置轨道的背景颜色为天蓝色。
height:10px;:设置轨道的高度为10像素。
border-radius:5px;:设置轨道的边框半径为5像素,使其呈现圆角。

"QSlider::handle:horizontal {"
"background:qradialgradient(spread:pad,cx:0.5,cy:0.5,radius:0.5,fx:0.5,fy:0.5,stop:0.7 white,stop:0.8 rgb(140,212,255));"
"width:20px;"
"border-radius:10px;"
"margin-top:-5px;"
"margin-bottom:-5px;"
"}"

这段代码定义了滑块的样式。具体来说:
background:qradialgradient(…);:设置了一个径向渐变作为滑块的背景,其中渐变从0.7位置的白色到0.8位置的RGB(140,212,255)。这个渐变将会形成滑块的视觉效果。
width:20px;:设置滑块的宽度为20像素。
border-radius:10px;:设置滑块的边框半径为10像素,使其呈现圆角。
margin-top:-5px; 和 margin-bottom:-5px;:这两行代码将滑块的上下外边距都设置为-5像素,用于垂直居中滑块。

"horizontalSlider::sub-page:horizontal{"
"background:red;"
"margin:5px;"
"border-radius:5px;"
"}"

这段代码定义了已填充部分的样式。具体来说:
background:red;:设置已填充部分的背景颜色为红色。
margin:5px;:设置已填充部分的外边距为5像素,用于与轨道之间的间距。
border-radius:5px;:设置已填充部分的边框半径为5像素,使其呈现圆角。

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

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

相关文章

C语言分析基础排序算法——归并排序

目录 归并排序 递归版本 非递归版本 非递归版本的问题 归并排序小优化 归并排序 归并排序,分为分治以及合并,分治部分可以使用递归或者非递归完成,归并排序的基本思路是:将已有序的子序列合并,得到完全有序的序列…

解决 :nvrtc: error: invalid value for --gpu-architecture (-arch)

核心:在显卡安装的cuda版本适配的pytorch中,更换pytorch的版本 刚遇到这个错误时,在网上搜索了一下,感谢博主1和博主2的解决方法带给我的启发。 标题服务器cuda是11.3版本,配置其他环境“御用”的pytorch安装语句 co…

社区维修平台|基于SpringBoot+ Mysql+Java+JSP技术的社区维修平台设计与实现(可运行源码+数据库+设计文档+部署说明+视频演示)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 住户后台功能 维修员前台功能 维修员后台功能 管理员功能登录 系统功能设计 数据库E…

用python实现Dubins曲线生成

Dubins曲线是连接两个具有指定方向和位置的点的最短路径,其中路径受到固定曲率约束(如车辆的转向限制)。Dubins曲线常用于机器人路径规划、车辆轨迹规划等领域。 Dubins曲线可以分为三种类型:CCC (Curve-Curve-Curve), CCL (Curv…

C++面试题和笔试题(四)

一、intx[6][4],(*p)[4];px;则*(p2)指向哪里? A X[0][1]B X[0][2]C X[1][0]D X[2][0] 官方解释: D int x[6][4], (*p)[4]; p x; 在这里,x 是一个二维数组,它有6行和4列。p 是一个指向具有4个整数的数组的指针。 当你执行…

DevOps-SonarQube整合Jenkins

下载SonarQube Scanner 登录Jenkins服务器,下载SonarQube Scanner wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-5.0.1.3006-linux.zip安装unzip,需要通过它来解压zip压缩包 yum install -y unzip解压So…

学习笔记——计算机网络(Internet、网络边缘)

一、Internet 网络是由多个计算机和其他网络设备通过通信链路相互连接而形成的互联网,用于实现数据传输和资源共享。它是现代信息社会中不可或缺的基础设施。 1.计算机网络: 通过通信链路连接; 以共享资源为目标; 资源包括&a…

基于Web的论文管理系统设计

目 录 目 录 III 摘 要 V 关键词 V Abstract VI Key Word VI 第一章 绪论 6 1.1系统设计背景 1 1.2系统设计目的与意义 1 1.3国内外现状 2 1.4本文结构 3 第二章 需求分析 3 2.1系统需求分析 4 2.2系统角色设计 4 第三章 系统开发技术 4 3.1 PHP语言简介和特点 5 3.2 Mysql数据…

【项目笔记】java微服务:黑马头条(day02)

文章目录 app端文章查看,静态化freemarker,分布式文件系统minIO1)文章列表加载1.1)需求分析1.2)表结构分析1.3)导入文章数据库1.3.1)导入数据库1.3.2)导入对应的实体类 1.4)实现思路1.5)接口定义1.6)功能实现1.6.1):导入heima-leadnews-article微服务&am…

学C还是学C++?

计算机专业学生,大一上学期学习了C语言,下学期学校要学C,请问我寒假继续深入学习C还是提前学C,大佬们有什么建议吗?(个人感觉C学的不是很明白,链表文件什么的还不是很懂…) 这个并没有一个统一的…

流量池增长(6)

DMP和游戏化思维 流量的运营与挖掘 DMP: Data Management Platform,是一种用户数据标签化的管理和应用平台 DMP的价值 精准营销运营优化 建立DMP 用户标签化:与其他企业进行数据标签的撞库,进行精准的广告投放管理:执行营销策略…

7-3 截取字符串7-5 单词倒排

7-3 截取字符串&#xff08;分数 25&#xff09; 作者 刘琦 单位 天津城建大学 用户在三行中分别输入一个字符串s和两个整数m,n&#xff0c;输出字符串s中位于m和n&#xff08;包括m但不包括n&#xff0c;m<n&#xff09;之间的子字符串。 输入格式: 例如&#x…

数据库管理-第160期 Oracle Vector DB AI-11(20240312)

数据库管理160期 2024-03-12 数据库管理-第160期 Oracle Vector DB & AI-11&#xff08;20240312&#xff09;1 向量的函数操作to_vector()将vector转换为标准值vector_norm()vector_dimension_count()vector_dimension_format() 2 将向量转换为字符串或CLOBvector_seriali…

I O 流

IO流 啥是流 1、IO&#xff1a;输入 \ 输出流&#xff1a;一种抽象概念&#xff0c;是对数据传输的总称&#xff0c;也就是说&#xff0c;数据在设备间的传输称为流&#xff0c;流的本质&#xff0c;是数据传输IO流&#xff0c;就是用来&#xff0c;处理设备间的数据传输问题…

Android 使用adb操作WiFi相关指令

没有系统原生设置应用又需要调试WiFi功能时&#xff0c;可以使用如下指令来验证WiFi相关功能 最常用的就是 svc wifi enable/disable&#xff0c;再使用wpa_supplicant/wpa_cli来验证&#xff0c;但对于AP功能就没办法验证了&#xff0c;其实Android有组很强大的shell指令集&a…

明明jar包存在却报错找不到包名?两招教你解决java: 程序包org.springframework.context.annotation不存在问题!

一、问题提出 IDEA项目有时因为依赖库的问题出现出错&#xff1a; java: 程序包org.springframework.context.annotation不存在&#xff0c;如下图。 二、解决办法 方案1&#xff1a; 重新导入项目 ① 将项目中 .idea .iml 全部删除&#xff0c;项目重新导入 ② 用idea重新…

看完让你的RSA提升一个台阶 [GKCTF 2021]RRRRsa

阅读须知: 探索者安全团队技术文章仅供参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作,由于传播、利用本公众号所提供的技术和信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,如有侵权烦请告知,我们会立即删除…

2024计算机二级Python

1. 栈是先进先出&#xff0c;队是后进后出 2. 代码输出长度为5并不是\不占用位置&#xff0c;而是\与其后边的数字共同占用一个字符 3. 首先要弄清range函数此时表示的范围是前闭后开&#xff0c;不包含后面的数字&#xff0c;%函数表示的是余数&#xff0c;只有4是被整除的…

各种实用设置

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、命令行设置代理二、python包下载三、git设置代理 前言 一、命令行设置代理 export http_proxy"http://addr:port"二、python包下载 设置代理 …

sprintf函数和printf函数

在C语言中&#xff0c;sprintf函数和printf函数是两个非常常用的函数&#xff0c;它们都用于格式化输出字符串。尽管它们的名称很相似&#xff0c;但它们的功能却有所不同。 首先让我们来看一下printf函数。printf函数是C语言中最常用的输出函数之一&#xff0c;它用于将格式化…