#QT(MP3播放器-部分界面)

1.IDE:QTCreator


2.实验:制作一个mps播放器,界面可以实现鼠标拖动


3.记录:

(1)network网络多线程

(2)Http

(3)QJsonObject封装JSON对象

(4)QMediaPlayer/Playist类应用

(5)SQLite存储搜索歌曲

A.画布覆盖

void Widget::paintEvent(QPaintEvent *)   //播放器画布
{
    QPainter paint(this);
    paint.drawPixmap(0,0,width(),height(),QPixmap(":/imag/picture/background.jpg"));  //绘制画布
}

B.皮肤,信息,退出按钮 

C. 按钮图标透明化

a.勾选flat

b.在style-sheet填入以下代码

background-color:transparent

 

 c.禁止窗口大小改变,关闭窗口标题

    this->setFixedSize(this->geometry().size());   //设定窗口固定大小
    this->setWindowFlag(Qt::FramelessWindowHint);  //关闭窗口标题

此时运行效果

d.加入搜索栏,UI设计

在如图两个按钮的style中加入以下代码,将搜索栏放在一个GroupBox内

color:RGB(255,255,255);
background-color:transparent;

 e.在pro文件中加入 network multimedia sql

QT       += core gui network multimedia sql

f.将以下库加入到widget.h文件中(QMediaPlaylist已经被移除)

#include <QNetworkRequest>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QEventLoop>
#include <QJsonArray>
#include <QJsonObject>
#include <QMediaPlayer>
//#include <QMediaPlaylist>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QMessageBox>
#include <QTime>
#include <math.h>
#include <QMouseEvent>

4.代码

pro

QT       += core gui network multimedia sql

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++17

# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0

SOURCES += \
    main.cpp \
    widget.cpp

HEADERS += \
    widget.h

FORMS += \
    widget.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

RESOURCES += \
    img.qrc

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

#include <QNetworkRequest>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QEventLoop>
#include <QJsonArray>
#include <QJsonObject>
#include <QMediaPlayer>
//#include <QMediaPlaylist>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QMessageBox>
#include <QTime>
#include <math.h>
#include <QMouseEvent>

QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    void paintEvent(QPaintEvent *);     //处理背景画布(函数重新定义)
private slots:
    void on_leave_pb_clicked();    //离开按钮按下时

private:
    Ui::Widget *ui;

protected:
    //音乐歌曲下载和播放
    void DownloadPlayer(QString album_id,QString hash);

    //访问HTTP网页
    void HttpAccessFunc(QString);

    //音乐的hash播放和ablum_id解析(使用JSON)
    void HashJsonAnalysis(QByteArray);

    //搜索音乐数据信息的JSON解析,解析出真正的音乐文件和歌词
    QString MusicJsonAnalysis(QByteArray);

protected:
    //鼠标拖住窗口实现移动
    void mouseMoveEvent(QMouseEvent *event);  //移动事件
    void mousePressEvent(QMouseEvent *event); //按下事件
    void mouseReleaseEvent(QMouseEvent *event); //释放事件

private:
    //定义坐标
    QPoint m_mousepoint;
    QPoint movement;
    bool mousepress;
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
#include <QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->setFixedSize(this->geometry().size());   //设定窗口固定大小
    this->setWindowFlag(Qt::FramelessWindowHint);  //关闭窗口标题
}

Widget::~Widget()
{
    delete ui;
}

void Widget::paintEvent(QPaintEvent *)   //播放器画布
{
    QPainter paint(this);
    paint.drawPixmap(0,0,width(),height(),QPixmap(":/imag/picture/background.jpg"));  //绘制画布
}

void Widget::on_leave_pb_clicked()   //关闭按钮
{
    close();
}
/******************************************************************************************************/
//音乐歌曲下载和播放
void Widget::DownloadPlayer(QString album_id,QString hash)
{

}

//访问HTTP网页
void Widget::HttpAccessFunc(QString)
{

}

//音乐的hash播放和ablum_id解析(使用JSON)
void Widget::HashJsonAnalysis(QByteArray)
{

}

//搜索音乐数据信息的JSON解析,解析出真正的音乐文件和歌词
QString Widget::MusicJsonAnalysis(QByteArray)
{

}
/******************************************************************************************************/
void Widget::mouseMoveEvent(QMouseEvent *event)  //移动事件
{
    if(mousepress)
    {
        QPoint movePos=event->globalPos();   //窗口初始位置
        move(movePos-m_mousepoint);
    }
}
void Widget::mousePressEvent(QMouseEvent *event) //按下事件
{
    if(event->button()==Qt::LeftButton)
        mousepress=true;
    m_mousepoint=event->globalPos()-pos();
}
void Widget::mouseReleaseEvent(QMouseEvent *event) //释放事件
{
    Q_UNUSED(event);
  //  mousepress=false;
}

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

c语言-大小写字母的转换

目录 方法一&#xff1a;库函数直接转换 1、toupper的测试代码 2、tolower的测试代码 方法二&#xff1a;通过修改ASCII码值转换 1、自己实现大写转小写 2、自己实现小写转大写 结语 前言&#xff1a; 在使用c语言写代码时&#xff0c;通常会遇到很多将大小写字母相互…

性能测试总结 —— 测试流程篇!

本文主要介绍下性能测试的基本流程&#xff0c;性能测试从实际执行层面来看&#xff0c;测试的过程一般分为这么几个阶段&#xff0c;如下图&#xff1a;       下面分别介绍下每个阶段具体需要做什么&#xff1a; 一、性能需求分析&#xff1a; 性能需求分析是整个性能…

从零学习Linux操作系统 第三十部分 部署Anisble

一、ansible实验环境的部署 主控机 更改服务器主机名 hostnamectl set-hostname westos_ansible.westos.org 主服务器需要能够实现上网 修改网卡使之能够上网 能ping通 代表可以连接外网 搭载本地软件仓库 并且挂载镜像 装载 dnf install httpd -y 让其开机启动并且…

C语言指针的初步认识--学习笔记(3)

1. 字符指针变量 在C语言中&#xff0c;字符串通常被视为字符数组&#xff0c;但它们可以有不同的表示方式。字符指针变量存储的是字符串的地址。这意味着&#xff0c;当你有一个字符串时&#xff0c;你可以通过改变字符指针的值来改变这个字符串&#xff0c;因为你实际上改变的…

C++_位图

目录 1、位图的使用 2、位图实现 3、位图与哈希表的区别 4、位图的应用 结语 前言&#xff1a; 位图采用的是哈希表的思想&#xff0c;哈希表的映射层面是在字节上&#xff0c;而位图的映射层面就是在bit位上。由于bit位所能展现的信息无非只有‘1’和‘0’&#xff0c;所…

LeetCode 热题 100 (尽量ACM模式刷) 持续更新!!!

LeetCode 热题 100 哈希hash 1 两数之和 /** 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出和为目标值target的那两个整数&#xff0c;并返回它们的数组下标。* 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案…

项目管理必备:进度报告撰写指南!

本文将探讨如何将进度报告写作整合到你的工作流程中&#xff0c;包括确定最适合的报告时间、编写方法和与团队一起构建报告结构的建议。最后&#xff0c;还会分享一些撰写进度报告的最佳做法&#xff0c;助你掌握这种对工作有巨大帮助的方法。 什么是进度报告&#xff1f; 它…

Python 应用程序编程接口库之pywin32使用详解

概要 在Python的世界里,有许多优秀的第三方库可以帮助开发者更轻松地处理各种任务。其中,pywin32库是一个特别引人注目的工具,它提供了对Windows API的完整访问,使得开发者能够利用Python来编写强大的Windows应用程序,从简单的脚本到复杂的桌面应用,pywin32都能胜任。 什…

算力调度和云计算有何区别

Canalys发布的研究报告显示&#xff0c;2023年第二季度&#xff0c;全球云基础设施服务支出增长16%&#xff0c;达到724亿美元。 此前云厂商们的高速增长&#xff0c;主要归功于大规模的企业数字化转型和上云。当前市场的增速放缓&#xff0c;除了上云普及带来的市场增量见顶&…

Dockerfile(3) - WORKDIR 指令详解

WORKDIR 切换到镜像中的指定路径&#xff0c;设置工作目录在 WORKDIR 中需要使用绝对路径&#xff0c;如果镜像中对应的路径不存在&#xff0c;会自动创建此目录一般用 WORKDIR 来替代 切换目录进行操作的指令 RUN cd <path> && <do something> WORKDIR…

【算法】顺时针打印矩阵(图文详解,代码详细注释

目录 题目 代码如下: 题目 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则打印出数字:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 这一道题乍一看,没有包含任何复杂的数据结构和…

Yolov8改进交流

YOLO v8改进 YOLOv8的改进&#xff0c;我接触的主要分为网络改进和代码改进&#xff0c;网络改进就是以注意力、主干为主&#xff0c;代码改进就是类似于Iou&#xff0c;类别权重等修改。 以下是yolov8的原始模型。 # Ultralytics YOLO &#x1f680;, AGPL-3.0 license # YO…

词嵌入向量和位置编码向量的整合

词嵌入向量和位置编码向量的整合 flyfish 文本序列 -> 输入词嵌入向量&#xff08;Word Embedding Vector&#xff09;-> 词向量 位置编码向量&#xff08;Positional Encoding Vector&#xff09; Embedding 的维度使用了3 可以输出打印看结果 from collections im…

如何使用Python操作MySQL的各种功能?高级用法?

当今互联网时代&#xff0c;数据处理已经成为了一个非常重要的任务。而MySQL作为一款开源的关系型数据库&#xff0c;被广泛应用于各种场景。本篇博客将介绍如何使用Python操作MySQL的各种功能&#xff0c;以及一些高级用法。 连接MySQL 在Python中&#xff0c;我们可以使用p…

不同用户同时编辑商品资料导致的db并发覆盖

背景 这个问题的背景来源于有用户反馈&#xff0c;他在商品系统中对商品打的标签不见了&#xff0c;影响到了前端页面上商品的资料显示 不同用户编辑同一商品导致的数据覆盖问题分析 查询操作日志发现用户B确实编辑过商品资料&#xff0c;并且日志显示确实打上了标签&#x…

【论文阅读】Mamba:选择状态空间模型的线性时间序列建模(二)

文章目录 3.4 一个简化的SSM结构3.5 选择机制的性质3.5.1 和门控机制的联系3.5.2 选择机制的解释 3.6 额外的模型细节A 讨论&#xff1a;选择机制C 选择SSM的机制 Mamba论文 第一部分 Mamba:选择状态空间模型的线性时间序列建模(一) 3.4 一个简化的SSM结构 如同结构SSM&#…

C++入门项目:通讯录管理系统

文章目录 一、步骤拆分1.系统需求2.显示菜单3.添加联系人4.显示联系人5.删除联系人6.查找联系人7.修改联系人8.清空通讯录9.退出功能 二、完整代码&#xff08;200行&#xff09;三、手把手视频教程 一、步骤拆分 1.系统需求 利用C来实现一个通讯录管理系统&#xff0c;系统中…

[计算机效率] 软件优化及垃圾清理

1.7 软件优化及垃圾清理 1.7.1 Advanced SystemCare(优化清理) Advanced SystemCare是一款功能强大的系统性能优化软件&#xff0c;可以全方位诊断系统&#xff0c;找到性能瓶颈并进行有针对性的优化&#xff0c;提升系统运行速度和网络速度&#xff0c;还可以清理加速和保护…

串联谐振电路基础知识2(总结篇)

我们发现对于串联谐振电路,整个电路来讲,不是纯感性,也不是纯容性,也不一定是纯阻性 如果,感抗=容抗,那么感抗容抗刚好抵消,谐振电路呈纯阻性了 如果是,感抗>容抗,那么串联谐振电路就是,感抗抵消容抗之后还剩下部分感抗。对于这个串联谐振电路而言,他就是等效成感…

基于springboot的作业管理系统论文

摘 要 使用旧方法对作业管理信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在作业管理信息的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。 这次开发的作业管理系统有…