当前位置: 首页 > news >正文

QT mp3音乐播放器实现框架,Qt鼠标事件,网络编程,QSqlite,Json解析,HTTP请求等

QT mp3音乐播放器实现框架,Qt鼠标事件,网络编程,QSqlite,Json解析,HTTP请求等

  • 框架搭建
  • UI设计
  • mp3.h
  • mp3.cpp
  • 隐藏窗口标题 最大化 最小化 关闭


框架搭建

.pro添加

# 网络 添加多媒体 数据库
QT       += network multimedia sql

添加头文件

#include <QWidget>
#include <QNetworkRequest>               //HTTP的URL请求管理类
#include <QNetworkAccessManager>   //网络入口
#include <QNetworkReply>                   //网络应答
#include <QEventLoop>                        //网络请求
#include <QJsonArray>                         //解析数组
#include <QJsonObject>                      //解析对象
#include <QMediaPlayer>                    //媒体播放
#include <QMediaPlaylist>                   //媒体播放列表
#include <QSqlDatabase>                    //数据库
#include <QSqlQuery>                         //数据库查询
#include <QSqlQueryModel>               //查询模式
#include <QSqlError>                           //数据库报错
#include <QMessageBox>                   //弹出信息框
#include <QTime>                               //hh:mm:ss
#include <math.h>                              //数学
#include <QDebug>
#include <QMoveEvent>                    //移动事件
#include <QScreen>                          //屏幕
//代码中引入头文件
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))//qt当前版本>=qt5
#include <QtWidgets>
#endif
#if (QT_VERSION >= QT_VERSION_CHECK(6,0,0))//qt当前版本>=qt6
#include <QtCore5Compat>
#endif//.默认Qt6开启了高分屏支持,界面会变得很大,甚至字体发虚,很多人会不习惯,
//因为这种模式如果程序很多坐标计算没有采用devicePixelRatio进行运算的话,
//100%会出现奇奇怪怪的问题,因为坐标不准确了。要取消这种效果可以设置高分屏缩放因子。
#if (QT_VERSION >= QT_VERSION_CHECK(6,0,0))QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::Floor);
#endif#if (QT_VERSION >= QT_VERSION_CHECK(6,0,0))std::sort(ipv4s.begin(), ipv4s.end());
#endif

添加资源文件夹
在这里插入图片描述

UI设计

在这里插入图片描述
在这里插入图片描述

按钮风格

QPushButton

QPushButton{
border-radius:0px;
background-repeat:no-repeat;
border:none;
background-position:canter canter;
}
QPushButton:hover
{background-color: rgba(230, 0, 0, 5);
}
color: rgb(255, 255, 255);/*字体颜色白色*/
background-color: rgba(255, 255, 255,50);/*背景色 透明度50*/
font: 75 12pt "Arial";

QLineEdit

color: rgb(255, 255, 255);/*字体颜色白色*/
background-color: rgba(255, 255, 255,50);/*背景色 透明度50*/
font: 75 12pt "Arial";
border:2px solid;
border-color: rgb(0, 255, 0);

mp3.h

#ifndef MP3_H
#define MP3_H#include <QWidget>
#include <QNetworkRequest>               //HTTP的URL请求管理类
#include <QNetworkAccessManager>   //网络入口
#include <QNetworkReply>                   //网络应答
#include <QEventLoop>                        //网络请求
#include <QJsonArray>                         //解析数组
#include <QJsonObject>                      //解析对象
#include <QMediaPlayer>                    //媒体播放
#include <QMediaPlaylist>                   //媒体播放列表
#include <QSqlDatabase>                    //数据库
#include <QSqlQuery>                         //数据库查询
#include <QSqlQueryModel>               //查询模式
#include <QSqlError>                           //数据库报错
#include <QMessageBox>                   //弹出信息框
#include <QTime>                               //hh:mm:ss
#include <math.h>                              //数学
#include <QDebug>
#include <QMoveEvent>                    //移动事件
#include <QScreen>                          //屏幕
//代码中引入头文件
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))//qt当前版本>=qt5
#include <QtWidgets>
#endif
#if (QT_VERSION >= QT_VERSION_CHECK(6,0,0))//qt当前版本>=qt6
#include <QtCore5Compat>
#endif//.默认Qt6开启了高分屏支持,界面会变得很大,甚至字体发虚,很多人会不习惯,因为这种模式如果程序很多坐标计算没有采用devicePixelRatio进行运算的话,
//100%会出现奇奇怪怪的问题,因为坐标不准确了。要取消这种效果可以设置高分屏缩放因子。
#if (QT_VERSION >= QT_VERSION_CHECK(6,0,0))QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::Floor);
#endif#if (QT_VERSION >= QT_VERSION_CHECK(6,0,0))std::sort(ipv4s.begin(), ipv4s.end());
#endifQT_BEGIN_NAMESPACE
namespace Ui { class MP3; }
QT_END_NAMESPACEclass MP3 : public QWidget
{Q_OBJECTpublic:MP3(QWidget *parent = nullptr);~MP3();void paintEvent(QPaintEvent *event);private slots:void on_PB_close_clicked();void on_PB_Function_clicked();private:Ui::MP3 *ui;//音乐下载播放void DownloadPlayer(QString id, QString hash);//访问httpvoid DashJsonAnalysis(QByteArray json);//搜索音乐数据信息的json解析 解析出真正的音乐文件和歌曲QString MusicJsonAnalysis(QByteArray musicJson);//获取qt版本void GetQtVersion();//获取当前屏幕尺寸区域QRect getScreenRect(bool available);int getScreenIndex();protected:void mouseMoveEvent(QMouseEvent *event);void mouseReleaseEvent(QMouseEvent *event);void mousePressEvent(QMouseEvent *event);
private://定义坐标QPoint m_mousePoint;QPoint movepress;bool  isMousePress;};
#endif // MP3_H

mp3.cpp

只是实现了鼠标窗口移动事件

#include "mp3.h"
#include "ui_mp3.h"
#include <QPainter>MP3::MP3(QWidget *parent): QWidget(parent), ui(new Ui::MP3)
{ui->setupUi(this);//固定窗口大小 宽 高this->setFixedSize(this->geometry().size());//隐藏窗口标题/*生成一个无边界的窗口。用户不能通过窗口系统移动或调整无边界窗口的大小。* 在x11上,标志的结果取决于窗口管理器和它理解主题和/或网络提示的能力。* 大多数现有的现代窗口管理器都可以处理这个问题。*/this->setWindowFlag(Qt::FramelessWindowHint);
}MP3::~MP3()
{delete ui;
}//画主题背景
void MP3::paintEvent(QPaintEvent *event)
{QPainter painter(this);//画家要操作的部件painter.drawPixmap(0,0,QPixmap(":/Images/2041960.jpg"));
}//关闭当前窗口
void MP3::on_PB_close_clicked()
{//this->close();qApp->quit();
}void MP3::DownloadPlayer(QString id, QString hash)
{}void MP3::DashJsonAnalysis(QByteArray json)
{}QString MP3::MusicJsonAnalysis(QByteArray musicJson)
{}void MP3::GetQtVersion()
{qDebug()<<"qt当前版本 = "<<QT_VERSION<<"qt 6检查版本 = "<<QT_VERSION_CHECK(6,0,0);
}void MP3::mouseMoveEvent(QMouseEvent *event)
{if(isMousePress){QPoint movePos = event->globalPos(); //当前鼠标移动坐标qDebug()<<" movePos = "<<event->globalPos();this->move(movePos - m_mousePoint);//鼠标当前移动坐标-原始坐标 = 第二个位置}
}void MP3::mouseReleaseEvent(QMouseEvent *event)
{Q_UNUSED(event);     //不使用isMousePress = false;//鼠标松开
}void MP3::mousePressEvent(QMouseEvent *event)
{if(event->button() == Qt::LeftButton)isMousePress = true;//鼠标按压//窗口移动距离m_mousePoint = event->globalPos() - this->pos(); //当前鼠标移动坐标-当前窗口坐标(默认固定不变)= 第一个位置qDebug()<<" globalPos = "<<event->globalPos();qDebug()<<" this->pos = "<<this->pos();               //窗口当前坐标}
//===========================================================================
//功能页
void MP3::on_PB_Function_clicked()
{GetQtVersion();getScreenRect(true);
}//获取当前屏幕索引
int MP3::getScreenIndex()
{//需要对多个屏幕进行处理int screenIndex = 0;
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))int screenCount = qApp->screens().count();qDebug()<<"screenCount = "<<screenCount;
#elseint screenCount = qApp->desktop()->screenCount();
#endifif (screenCount > 1) {//找到当前鼠标所在屏幕QPoint pos = QCursor::pos();qDebug()<<"pos = "<<pos;for (int i = 0; i < screenCount; ++i) {
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))if (qApp->screens().at(i)->geometry().contains(pos)) {
#elseif (qApp->desktop()->screenGeometry(i).contains(pos)) {
#endifscreenIndex = i;break;}}}qDebug()<<"screenIndex = "<<screenIndex;return screenIndex;
}//获取当前屏幕尺寸区域
QRect MP3::getScreenRect(bool available)
{QRect rect;int screenIndex = getScreenIndex();if (available) {
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))rect = qApp->screens().at(screenIndex)->availableGeometry();
#elserect = qApp->desktop()->availableGeometry(screenIndex);
#endif} else {
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))rect = qApp->screens().at(screenIndex)->geometry();
#elserect = qApp->desktop()->screenGeometry(screenIndex);
#endif}qDebug()<<"rect = "<<rect;return rect;
}

隐藏窗口标题 最大化 最小化 关闭

生成一个无边界的窗口。用户不能通过窗口系统移动或调整无边界窗口的大小。
在x11上,标志的结果取决于窗口管理器和它理解主题和/或网络提示的能力。
大多数现有的现代窗口管理器都可以处理这个问题。

this->setWindowFlag(Qt::FramelessWindowHint);

相关文章:

QT mp3音乐播放器实现框架,Qt鼠标事件,网络编程,QSqlite,Json解析,HTTP请求等

QT mp3音乐播放器实现框架&#xff0c;Qt鼠标事件&#xff0c;网络编程&#xff0c;QSqlite,Json解析&#xff0c;HTTP请求等框架搭建UI设计mp3.hmp3.cpp隐藏窗口标题 最大化 最小化 关闭框架搭建 .pro添加 # 网络 添加多媒体 数据库 QT network multimedia sql添加头…...

硬件学习 软件Cadence day04 PCB 封装绘制

1.文章内容&#xff1a; 1. 贴片式电容 PCB 封装绘制 &#xff08;型号 c0603 &#xff09; 2. 贴片式电阻 PCB 封装绘制 &#xff08;型号 r0603 &#xff09; 3. 安规式电容 PCB 封装绘制 &#xff08;这个就是 有一个电容&#xff0c;插入一个搞好的孔里面 …...

【Java】yield()和join()区别

一、java 线程调度的背景 java虚拟机要求在多线程中实现 preemptive和priority-based调度&#xff0c;这意味着java中每一个线程被分配了特定的优先级&#xff0c;正整数在定义好的范围内不断减。优先级可以通过开发者改变但是java虚拟机从不改变线程的优先级&#xff0c;即使…...

【MySQL】Java连接MySQL数据库(封装版只需会MySQL)

一、准备普通项目如果创建的是普通的Java项目&#xff0c;我们需要去maven仓库下载jdbc驱动包然导入项目中就能使用&#xff0c;具体步骤详见MySQL数据库之Java中如何使用数据库【JDBC编程】maven项目如果创建的项目是maven项目&#xff0c;我们只需在pom.xml文件里引入一组依赖…...

【java基础】运算符

运算符 operator 运算符优先级 Operators 操作员Precedence 优先级postfix 后缀expr expr--unary 一元的expr --expr expr -expr ~ !multiplicative 〔数〕乘法的 / %additive 添加剂 -shift 移动<< >> >>>relational 关系的< > < > insta…...

带噪学习-概述

在实际应用的时候&#xff0c;我们的样本不会是完全干净的&#xff0c;即存在噪声样本。那使用存在噪声的样本时&#xff0c;我们如何更有效的进行模型学习呢&#xff1f;Label Dependent Nose样本选择&#xff08;Sample Selection&#xff09;第一种很直接的想法&#xff0c;…...

Scratch少儿编程案例-多彩打地鼠

专栏分享 点击跳转=>Unity3D特效百例点击跳转=>案例项目实战源码点击跳转=>游戏脚本-辅助自动化点击跳转=>Android控件全解手册点击跳转=>Scratch编程案例👉关于作者...

为什么拔掉计算机网线还能ping通127.0.0.1?

前言 当我们在计算机上拔掉网线之后&#xff0c;发现我们仍然可以使用ping命令来ping通本机的IP地址127.0.0.1&#xff0c;这让很多人感到困惑&#xff0c;认为拔掉网线后计算机就无法与外界通信了&#xff0c;为什么还能ping通本机的IP地址呢&#xff1f; 本文的目的是通过对…...

Android kotlin 内、外部存储根目录及测试(可以实现仿微信未读消息数提示数字)

<<返回总目录 文章目录 一、内部存储与外部存储三、外部存储的写读测试(可以实现仿微信未读消息数提示数字)一、内部存储与外部存储 所有Android设备都有两个文件存储区域:内部存储空间(internal Storage)和外部存储空间(external Storage)。所以,Android系统从逻…...

Android 7.0 OTA升级(高通)

文章目录1. Full OTA 方式升级介绍1.1 Full OTA 制作第一步&#xff1a;生成 msm89xx-target_files-eng.XXX.zip1.2 Full OTA 制作第二步&#xff1a;Modem 等非 HLOS 加入升级包的方法1.3 Full OTA 制作第三步&#xff1a;生成 update.zip 升级包2. Incremental OTA 方式升级介…...

工作负载之DeployMent

DeployMent 无状态工作负载&#xff08;Deployment&#xff09;&#xff1a;即kubernetes中的“Deployment”&#xff0c;无状态工作负载支持弹性伸缩与滚动升级&#xff0c;适用于实例完全独立、功能相同的场景&#xff0c;如&#xff1a;nginx、wordpress等。 也是公司中应…...

淘宝tmall页面数据获取,API接口对接程序

item_get-获得淘宝商品详情请求参数请求参数&#xff1a;num_iid652874751412&is_promotion1参数说明&#xff1a;num_iid:淘宝商品IDis_promotion:是否获取取促销价响应参数Version: Date:2022-04-04名称类型必须示例值描述itemitem[]1宝贝详情数据num_iidBigint152081325…...

基于粒子群优化算法的电动汽车充放电V2G研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

java并发编程原理2 (AQS, ReentrantLock,线程池)

一、AQS&#xff1a; 1.1 AQS是什么&#xff1f; AQS就是一个抽象队列同步器&#xff0c;abstract queued sychronizer&#xff0c;本质就是一个抽象类。 AQS中有一个核心属性state&#xff0c;其次还有一个双向链表以及一个单项链表。 首先state是基于volatile修饰&#x…...

研报精选230219

目录 【行业230219山西证券】煤炭行业周报&#xff1a;复工改善&#xff0c;港口价格企稳反弹【行业230219中航证券】农林牧渔行业周观点&#xff1a;一号文件落地&#xff0c;生物育种超势不改【行业230219华西证券】汽车行业周报&#xff1a;新车密集上市 自主转型提速【个股…...

【PPPoE】PPPoE拨号流程

简介 PPPoE&#xff08;Point-to-Point Protocol over Ethernet&#xff09;是一种在以太网上封装PPP协议的方式&#xff0c;常用于在宽带接入中进行拨号。 PPPoE的拨号原理如下&#xff1a; 客户端发起PPPoE Active Discovery Initiation (PADI)报文&#xff0c;广播到网络…...

django项目实战(django+bootstrap实现增删改查)

目录 一、创建django项目 二、修改默认配置 三、配置数据库连接 四、创建表结构 五、在app当中创建静态文件 六、页面实战-部门管理 1、实现一个部门列表页面 2、实现新增部门页面 3、实现删除部门 4、实现部门编辑功能 七、模版的继承 1、创建模板layout.html 1&…...

Lesson4---Python语言基础(2)

4.1 内置数据结构 4.1.1 序列数据结构&#xff08;sequence&#xff09; 成员是有序排列的每个元素的位置称为下标或索引通过索引访问序列中的成员Python中的序列数据类型有字符串、列表、元组 “abc” ≠ “bac” 4.1.1.1 创建列表和元组 Python中的列表和元组&#xff0c…...

NCHW - NHWC - CHWN 排列

TensorFlow有两种数据格式NHWC和NCHW,默认的数据格式是NHWC,可以通过参数data_format指定数据格式。这个参数规定了 input Tensor 和 output Tensor 的排列方式。 1、data_format 设置为 “NHWC” 时,排列顺序为 [batch, height, width, channels] 设置为 “NCHW” 时,排…...

2019蓝桥杯真题矩阵切割(填空题) C语言/C++

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小明有一些矩形的材料&#xff0c;他要从这些矩形材料中切割出一些正方形。 当他面对一块矩形材料时&#xff0c;他总是从中间切割一刀&#xff0c;切出一块最大的正…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

IP如何挑?2025年海外专线IP如何购买?

你花了时间和预算买了IP&#xff0c;结果IP质量不佳&#xff0c;项目效率低下不说&#xff0c;还可能带来莫名的网络问题&#xff0c;是不是太闹心了&#xff1f;尤其是在面对海外专线IP时&#xff0c;到底怎么才能买到适合自己的呢&#xff1f;所以&#xff0c;挑IP绝对是个技…...

MFC 抛体运动模拟:常见问题解决与界面美化

在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...

实战三:开发网页端界面完成黑白视频转为彩色视频

​一、需求描述 设计一个简单的视频上色应用&#xff0c;用户可以通过网页界面上传黑白视频&#xff0c;系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观&#xff0c;不需要了解技术细节。 效果图 ​二、实现思路 总体思路&#xff1a; 用户通过Gradio界面上…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明&#xff0c;此教程是针对Simulink编译模型并导入Veristand中编写的&#xff0c;同时需要注意的是老用户编译可能用的是Veristand Model Framework&#xff0c;那个是历史版本&#xff0c;且NI不会再维护&#xff0c;新版本编译支持为VeriStand Model Generation Suppo…...