首页 > 其他分享 >Qt编写网易云界面 (1) -----主框架的实现

Qt编写网易云界面 (1) -----主框架的实现

时间:2023-08-20 09:02:20浏览次数:38  
标签:界面 Qt url pushButton ----- images border image png

为了增强自己的Qt桌面应用项目经验及技术,今天开个坑,实现网易云的基本页面。

先放一个参考依据

我们就以这个为主要,先来实现主界面,素材就在网上找,推荐一个素材网站:

iconfont-阿里巴巴矢量图标库

这是项目工程截图

image-20230819064807112

主要实现了第一行的各个按键,实际效果如图:

image-20230819065054112

目前只实现了查号关闭应用功能,项目中的qss是采用一位大佬放出来的,目前主要方向不在于美化界面,因此就先使用大佬的qss,核心代码如下:

AllMain::AllMain(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::AllMain)
{
    ui->setupUi(this);
    //首先去除自带的边框
    this->setWindowFlag(Qt::FramelessWindowHint);
}

void AllMain::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event)
    QPainter painter_mainback(this);
    painter_mainback.drawPixmap(0,0,this->width(),this->height(),QPixmap(":/mianwindow/images/mainback.png"));
    ui->pushButton_people->setMask(QRegion(0,0,28,28,QRegion::Ellipse));
}

void AllMain::mousePressEvent(QMouseEvent *event)
{
    //获取title widget 的高度,这里固定为60px
    int titleHeight = ui->title_Widget->height();
    if(event->y() <titleHeight)
    {
        last = event->globalPos(); //获取到按压的位置
    }
}

void AllMain::mouseMoveEvent(QMouseEvent *event)
{
    int titleHeight = ui->title_Widget->height();
    if(event->y() <titleHeight)
    {
        int dx = event->globalX() - last.x();
        int dy = event->globalY() - last.y();
        last = event->globalPos();
        this->move(this->x()+dx,this->y()+dy);
    }

}

void AllMain::mouseReleaseEvent(QMouseEvent *event)
{
    int titleHeight = ui->title_Widget->height();
    if(event->y() <titleHeight)
    {
        int dx = event->globalX() - last.x();
        int dy = event->globalY() - last.y();
        this->move(this->x()+dx,this->y()+dy);
    }
}
void AllMain::on_pushButton_close_clicked()
{
    this->close();
}
AllMain::~AllMain()
{
    delete ui;
}

当然需要在AllMain类中添加使用到的几个鼠标事件函数

//绘制背景函数
void paintEvent(QPaintEvent* event);
//鼠标按下
void mousePressEvent(QMouseEvent* event);
//鼠标移动
void mouseMoveEvent(QMouseEvent* event);
//鼠标释放
void mouseReleaseEvent(QMouseEvent* event);

使用到的qss:

/*背景颜色*/
QWidget#title_Widget
{
    background-color:rgb(236,65,65);
}
QWidget#centralWidget
{
     background-color:rgb(255,255,255);
}
 
/*标题LOGO文件*/
QLabel#label_title_logo
{
	border-image:url(./images/wylog.png);
}
/*关闭按钮*/
QPushButton#pushButton_close
{
	border-image:url(images/关闭.png);
}
QPushButton::hover#pushButton_close
{
	border-image:url(images/关闭.png);
}
QPushButton::pressed#pushButton_close
{
	border-image:url(images/关闭.png);
}
 
/*最大化按钮*/
QPushButton#pushButton_max
{
	border-image:url(images/最大化.png);
}
QPushButton::hover#pushButton_max
{
	border-image:url(images/最大化.png);
}
QPushButton::pressed#pushButton_max
{
	border-image:url(images/最大化.png);
}
/*最小化按钮*/
QPushButton#pushButton_min
{
	border-image:url(images/最小化.png);
}
QPushButton::hover#pushButton_min
{
	border-image:url(images/最小化.png);
}
QPushButton::pressed#pushButton_min
{
	border-image:url(images/最小化.png);
}
/*迷你按钮*/
QPushButton#pushButton_mini
{
	border-image:url(images/mini.png);
}
QPushButton::hover#pushButton_mini
{
	border-image:url(images/mini.png);
}
QPushButton::pressed#pushButton_mini
{
	border-image:url(images/mini.png);
}
 
/*后退按钮*/
QPushButton#pushButton_title_left
{
	border-image:url(images/后退.png); 
    background-color: rgb(217,59,59);
    border-radius:10px;
}
QPushButton::hover#pushButton_title_left
{
	border-image:url(images/后退.png);
    
}
QPushButton::pressed#pushButton_title_left
{
	border-image:url(images/后退.png);
 
}
/*前进按钮*/
QPushButton#pushButton_title_right
{
	border-image:url(images/前进.png);
    background-color: rgb(217,59,59);
    border-radius:10px;
    
}
 
QPushButton::hover#pushButton_title_right
{
	border-image:url(images/前进.png);
}
QPushButton::pressed#pushButton_title_right
{
	border-image:url(images/前进.png);
}
/*话筒按钮*/
QPushButton#pushButton_title_listen
{
  
   border-image:url(images/话筒.png);
}
 
/*个人中心按钮*/
QPushButton#pushButton_people
{
	border-image:url(images/比卡丘不皮.jpg);
}
 
/*个人中心按钮*/
QPushButton#pushButton_name
{
	border-image:url(images/btn_people_h.png);
}
QPushButton::hover#pushButton_name
{
	border-image:url(images/btn_people_h.png);
}
QPushButton::pressed#pushButton_name
{
	border-image:url(images/btn_people_h.png);
}
 
QLabel#label_people
{
	color: rgb(251,217,217);
}
 
QPushButton#pushButton_vip
{
	border-image:url(images/vip.png);
}
 
/*皮肤主题按钮*/
QPushButton#pushButton_cloth
{
	border-image:url(images/皮肤.png);
}
 
/*设置主题按钮*/
QPushButton#pushButton_set
{
	border-image:url(images/设置.png);
}
 
/*皮肤主题按钮*/
QPushButton#pushButton_message
{
	border-image:url(images/邮件.png);
}
 
/*消息提示框*/
QLabel#label_message_Tip
{
	color: rgb(255, 0, 0);
	background-color: rgb(255, 255, 255);
	border-radius: 7px;
}
 
QLabel#label_shuxian
{
	color: rgb(255, 255, 255);
}

计划使用一到两个月来实现此项目,希望不会烂尾。

标签:界面,Qt,url,pushButton,-----,images,border,image,png
From: https://www.cnblogs.com/dwinternet/p/17643543.html

相关文章

  • jeecg-Boot基于H2驱动的JDBC任意代码执行
    这几天的把人都给熬傻了,这个漏洞需要添加H2数据库依赖,jeecg自带的依赖没有什么可以利用的点,不知道有没有大师傅有其他想法漏洞描述JeecgBoot受影响版本中,由于jeecg-boot/jmreport/testConnectionApi接口未进行身份验证,并且未对dbUrl参数进行限制,当应用端存在H2数据库驱动依......
  • 欧几里得算法(辗转相除法)-- 实现分数计算
    博客地址:https://www.cnblogs.com/zylyehuo/#-*-coding:utf-8-*-"""利用欧几里得算法实现一个分数类,支持分数的四则运算(加法)"""classFraction:def__init__(self,a,b):self.a=aself.b=bx=self.gcd(a,b)se......
  • abp-vnext-pro 实战(八,聚合根的写法,客户M:N地址)
    参考数据字典模块的写法///<summary>///地址///</summary>publicclassAddress:FullAuditedAggregateRoot<Guid>,IMultiTenant{publicGuid?TenantId{get;protectedset;}///<summary>///公司名///</summary>p......
  • VS2015项目.net-framework-4.5.2升级或新建项目无法选择framework 4.6.2(解决办法)
    VS2015里面没有.NETFramework4.6.2VS2015默认安装的目标框架最高是.NETFramework4.6.1,但是我的项目里面某些NuGet软件包更新需要依赖.NETFramework4.6.2,项目就需要升级到目标框架.NETFramework4.6.2VS2015项目无法选择framework4.6.2的解决办法:第一步:系统环境安装.NET......
  • 折腾dir-505
    简介:折腾过w720n做打印服务器,已经有一台通过usb-hub,共享3台打印机给网络了。最近看dir-505也不错,还支持最新的openwrt,外观也比720n可爱了一些,就海鲜市场下了一台。原厂不死原厂自带不死,随便折腾,但是说明书上貌似没写。按着reset按钮,插入电源,直到红灯慢闪,才可以松开。设置本......
  • 03-04 基本数据类型(列表、元组、字典、集合)
    一、列表1、访问列表中的值list=['red','green','blue','yellow','white','black']print(list[0])#'red'print(list[1])print(list[2])print(list[-1])#blackprint(list[-2])#whiteprint(li......
  • 《摆与混》第三十五章--8月12日--周六
    周六,开摆。1.今天做了什么:今天8点半起床。洗漱后,简单吃了早饭,早上重回经典节奏,小小的学了会,下午摆烂时间,4点和哥们去羽毛球馆打球,晚上有客人来,招待了一下,还看了会比赛。2.解决了什么问题:Java课程推进,PTA继续冲击,加快了进度。3.明天干什么:预计继续学习Java,PTA同步跟进,大计划开始......
  • 案例—猎鹰火箭自主着陆--复现
    案例—猎鹰火箭自主着陆代码网址:Falcon9-Soft-Landing-Simulation:基于Simulink和Flightgear的猎鹰9号软着陆仿真(gitee.com)1.运行步骤##软件配置-MATLAB2020a-FlightGear2019.1.2-CVX(Matlab凸优化求解器)http://cvxr.com/cvx/凸优化工具箱使用安装网址 ---运......
  • 《摆与混》第三十四章--8月11日--周五
    周五,马上就是周末1.今天做了什么:今天9点起床(不背锅)。洗漱后,简单吃了个早饭(杂粮煎饼,好吃),上午正常学习,还看了会小说,5点出发健身锻炼(继续坚持),晚上看比赛(爽),大计划要来力!!!!2.解决了什么问题:Java课程推进,PTA继续冲击,加快了进度。3.明天干什么:预计继续学习Java,PTA同步跟进,继续推进大计划......
  • leetcode: TC of top-down memorization
    exampletoexplainhowtocalculateTimeComplexitythememosizemeanseachstatewillbecalculatedonlyoncehowabouttheTCineachstate? classSolution{publicbooleanwordBreak(Strings,List<String>wordDict){returndfs(s,w......