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

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

项目模块:

创建项目:

QT应用程序在工程创建时,qt create会生成一个继承自QWidget的类(创建的是基于Widget的工程),即主页面对应的类。

注:

QMainWindow/QWidget/QDialog这三种基类的区别如下:

简单来说,最基础的框架是QWidget类,而QMainWindow和QDialog类是在此基础之上的衍生,适合特定的应用场景。

然后是构建套件:

注:

qt的优势在于可以模块化生成对应的功能,QWidget是C++封装的显示控件,QML是前端显示框架,相较于像java或者js那样的前后端混合来做,qt也可以前后端分离,当然java大部分情况下不会用原生的java可视化,java是作为后端语言,前端有vue等框架或者三剑客,前后端分离能使程序更好的维护修改,移动端有像react这样的前端开发语言,Java说的跨平台性指的是后端跨平台,小程序开发也是不错的选择,电脑端或者移动端开发上线要租用服务器,web或者gui作为前端方式。

接着调整页面大小放入容器中的Widget并设置颜色

为了消除白边,将Margin和Space都设置为0

head内部设计
head内部由两部分构成,headLeft区域显⽰图标,headRight区域为搜索框和功能按钮区域。
拖两个widget到head中,将objectName修改为headLeft和headRight
按照这个做法初步做成这个样子(可以自己调整):

 界面美化:

首先需要对窗口进行美化,像主窗⼝是没有标题栏,需要调整窗口格式,创建Init函数作为初始化函数放在构造函数里

这是再构建会发现窗口没有标题栏也没法拖拽

主界面无法拖动的问题可以通过处理下⿏标单击(mousePressEvent)和⿏标移动(mouseMoveEvent)事件解决

QQMusic.h:protected:void mousePressEvent(QMouseEvent*event)override;void mouseMoveEvent(QMouseEvent*event)override;private:QPoint dragposition;QQMusic.cpp:void QQMusic::mousePressEvent(QMouseEvent *event)
{if(event->button() == Qt::LeftButton){dragposition = event->globalPos() - frameGeometry().topLeft();//获得鼠标按的位置到窗口左上角的距离return;}QWidget::mousePressEvent(event);
}void QQMusic::mouseMoveEvent(QMouseEvent*event)
{if(event->buttons()==Qt::LeftButton)//button和buttons函数的区别是button返回“那个按钮发生了此事件”,buttons返回"发生事件时哪些按钮还处于按下状态"{move(event->globalPos() - dragposition);//移动窗口左上角的坐标return;}QWidget::mouseMoveEvent(event);
}

值得注意的是这两个函数是对原本方法的override重写,不是自定义函数,因此也不需要在构造函数中调用

窗口阴影:

 #include <QGraphicsDropShadowEffect>void QQMusic::initUI()
{// 设置⽆边框窗⼝,即窗⼝将来⽆标题栏setWindowFlag(Qt::WindowType::FramelessWindowHint);this->setAttribute(Qt::WA_TranslucentBackground);//窗口透明QGraphicsDropShadowEffect*shadowEffect=new QGraphicsDropShadowEffect(this);//阴影偏移shadowEffect->setOffset(0,0);//黑色阴影shadowEffect->setColor("#000000");//阴影模糊半径shadowEffect->setBlurRadius(10);this->setGraphicsEffect(shadowEffect);}

添加图片资源:

接着美化UI:

现在基本的界面初见雏形啦

点赞收藏支持喔,马上更新下一节~

http://www.dtcms.com/a/289796.html

相关文章:

  • 什么是卡贴???
  • 国产电钢琴性价比实战选购指南
  • Python 虚拟环境与构建工具全景指南:功能介绍与对比分析
  • 基于Transformer的心理健康对话系统:从零构建AI心理咨询助手
  • 【全球甲烷估算模型】简化一箱模型(1-box model)
  • MySQL中的排序和分页
  • [simdjson] 实现不同CPU调度 | 自动硬件适配的抽象
  • C 语言经典编程题实战:从基础算法到趣味问题全解析
  • MybatisPlus-09.核心功能-IService开发复杂业务接口
  • 论文阅读:BLIP-2 (2023.4)
  • KOSMOS-2: 将多模态大型语言模型与世界对接
  • 第一章: 初识 Redis:背后的特性和典型应用场景
  • 你的created_time字段,用DATETIME还是TIMESTAMP?
  • brpc的安装与使用介绍以及channel的封装
  • spring-ai-alibaba 迭代字符分割器
  • RPG61.制作敌人攻击波数一
  • 30天打牢数模基础-AdaBoost讲解
  • CICS Application Programming Fundamentals 第8-6章
  • arinc818_icd设计范例
  • LLVM中AST节点类型
  • RGB颜色值如何转到灰度值
  • [每日随题14] 递推 - 滑动窗口 - 数学
  • JavaScript 中Object、Array 和 String的常用方法
  • java抗疫物质管理系统设计和实现
  • 【超分辨率专题】OSEDiff:针对Real-World ISR的单步Diffusion
  • [FDBUS 4.2]fdbus消息发送失败后的流程处理
  • SigLIP和SigLIP2
  • 题单【循环结构】
  • maven构建Could not transfer artifact失败原因
  • 系统思考:整体论