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请求等相关推荐

  1. 基于Qt的音乐播放器制作

    基于Qt的音乐播放器制作 使用浏览器自带工具抓包歌曲资源 开发人员工具抓包 点击浏览器右上角的 "-" 快捷键(Alt + F): 点击其中的"更多工具" ➡ ...

  2. 【QT的音乐播放器(简单版)】

    基于QT的音乐播放器 前言 一.主体效果 二.主要技术点: 1. mp3的ID3V2格式文件解析:作者.歌手.时长.专辑图片等 1.1 需要工具: 1.2 ID3V2文件格式 1.3 mp3ID3V2 ...

  3. C++ QT视频音乐播放器

     程序示例精选 C++/QT视频音乐播放器 如需安装运行环境或远程调试,见文章底部微信名片,由专业技术人员远程协助! 前言 这篇博客针对<<C++/QT视频音乐播放器>>编写代 ...

  4. 基于Qt的音乐播放器(二)切换歌曲,调节音量,调节语速,暂停

    2020博客之星年度总评选进行中:请为74号的狗子投上宝贵的一票! 我的投票地址:点击为我投票 文章目录 1.切换歌曲 2.调节音量 3.调节语速 4.播放/暂停 5.我们来看下效果 6.关于上一篇提 ...

  5. Qt+MPlayer音乐播放器开发笔记(二):交叉编译MPlayer以及部署到开发板播放演示

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/119991329 长期持续带来更多项目与技术分享,咨询请 ...

  6. QT小项目-QT在线音乐播放器

    QT在线音乐播放器 先上几张音乐播放器的图片 具体实现及部分代码 后面还有好多就不一一例举了 先上几张音乐播放器的图片 (主页图片来源网络) 具体实现及部分代码 搜索歌曲和获取歌曲具体信息的URL,这 ...

  7. Linux下基于Libmad库的MP3音乐播放器编写

    linux下基于Libmad库的MP3音乐播放器编写 libmad是一个开源mp3解码库,其对mp3解码算法做了很多优化,性能较好,很多播放器如mplayer.xmms等都是使用这个开源库进行解码的: ...

  8. JS单曲调用百度mp3音乐播放器代码

    在网上找的单曲调用百度mp3音乐播放器的代码,改了改,文本框输入歌曲名,中文逗号,歌手名,回车就可以试听了.几点说明:  百度音乐api 音乐文件地址,span,p,div,等都可以,ID 必须是so ...

  9. html音乐播放器样式,html5扁平化mp3音乐播放器样式代码

    特效描述:html5 扁平化mp3 音乐播放器样式.扁平风格的简易的mp3音乐播放器样式代码.html5 mp3音乐播放器 代码结构 1. 引入JS 2. HTML代码 0:00 0:00 'use ...

最新文章

  1. 斯坦福AI 5小时DNA测序破世界纪录!创人类新里程碑,成本仅3万
  2. python 中 sorted() 和 list.sort() 的用法
  3. json 数据类型简介
  4. WPF 之 线程使用
  5. Oracle启用和禁用触发器
  6. Linux网络编程 之 UDP编程(六)
  7. Hadoop生态Flume(三)拦截器(Interceptor)介绍与使用(1)
  8. Echars折线配置详解
  9. teamviewer 可用设备上限_2020:抚州办公楼采暖设备种类齐全
  10. 使用freetype来显示中文汉字和英文字符
  11. 《基于MFC的OpenGL编程》Part 3 Drawing Simple 2D Shapes
  12. react 移动端 h5 端日历组件 周日历 月日历 周视图 月视图
  13. 桌面创建html文件夹路径,HTML5+ - DirectoryEntry(文件夹及文件操作)
  14. 深度学习与计算机视觉教程(7) | 神经网络训练技巧 (下)(CV通关指南·完结)
  15. hdoj3085 / acwing177 Nightmare
  16. orientdb java_OrientDB Java连接操作
  17. stylecloud 自定义蒙版
  18. 固态硬盘和机械硬盘区别 固态硬盘和机械硬盘的优缺点
  19. java定义私有变量_Java Reflection(七):私有变量和私有方法
  20. 怎样给CSDN博客添加微信二维码

热门文章

  1. 美术宝软件测试面试流程怎么样,美术宝怎么样?硬核对比测评,告诉你好不好!...
  2. 什么是Entity Framework
  3. 回溯引用:前后一致匹配
  4. java文本域不可编辑_javascript:让表单 文本框 只读,不可编辑的方法
  5. 李世民之虎牢之战--天下英雄莫能当!
  6. Mybatis实现*mapper.xml热部署-分子级更新
  7. 脏读 幻读 不可重复读 及其解决方法
  8. EasyExcel 导出
  9. dialect和Cantonese:土话与方言
  10. linux mint如何升级,如何升级到Linux Mint 19