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:
现在基本的界面初见雏形啦
点赞收藏支持喔,马上更新下一节~