【Qt】仿360安全卫士界面(自定义阴影边框类)
00. 目录
文章目录
- 00. 目录
- 01. 概述
- 02. 开发环境
- 03. 自定义阴影边框类设计与实现
- 04. 测试代码
- 05. 示例下载
- 06. 附录
01. 概述
Qt默认的QDialog和QWidget都带有边框和标题栏。如何实现一个不带有标题栏的边框,并且边框带有阴影效果。其实很简单,我们只需要自定义QDialog类,然后实现重绘事件即可。
效果图如下所示(四周有阴影效果):
02. 开发环境
Windows系统:Windows10
Qt版本:Qt5.15或者Qt6
03. 自定义阴影边框类设计与实现
shadowborderwidget.h
#ifndef SHADOWBORDERWIDGET_H
#define SHADOWBORDERWIDGET_H#include <QDialog>
#include <QWidget>
#include <QMouseEvent>
#include <QPaintEvent>
#include <QPainterPath>
#include <QPainter>
#include <QtMath>// 阴影边框class ShadowBorderWidget : public QDialog
{Q_OBJECT
public://构造函数explicit ShadowBorderWidget(QWidget *parent = 0);//析构函数~ShadowBorderWidget();// QWidget interface
protected:virtual void mousePressEvent(QMouseEvent *event);virtual void mouseReleaseEvent(QMouseEvent *event);virtual void mouseMoveEvent(QMouseEvent *event);virtual void paintEvent(QPaintEvent *event);private:QPoint movePoint; //移动的点bool isMousePressed; //鼠标左键是否按下};#endif // SHADOWBORDERWIDGET_H
shadowborderwidget.cpp
#include "shadowborderwidget.h"/*
可以查看帮助文档:
void setWindowFlags ( Qt::WindowFlags type )
可以查看demo/example:
Window Flags Example.this->setWindowFlags(Qt::Dialog | Qt::WindowMinimizeButtonHint);setWindowFlags ( Qt::WindowFlags type )
Qt::FrameWindowHint:没有边框的窗口
Qt::WindowStaysOnTopHint://总在最上面的窗口
Qt::CustomizeWindowHint://自定义窗口标题栏,以下标志必须与这个标志一起使用才有效,
否则窗口将有默认的标题栏
Qt::WindowTitleHint:显示窗口标题栏
Qt::WindowSystemMenuHint://显示系统菜单
Qt::WindowMinimizeButtonHint://显示最小化按钮
Qt::WindowMaximizeButtonHint://显示最大化按钮
Qt::WindowMinMaxButtonsHint://显示最小化按钮和最大化按钮
Qt::WindowCloseButtonHint://显示关闭按钮Qt::Drawer://去掉窗口左上角的图标,右上角的最大化最小化按钮------解决方案--------------------
setWindowFlags(Qt::FramelessWindowHint);直接隐藏掉。。。*///构造函数
ShadowBorderWidget::ShadowBorderWidget(QWidget *parent):QDialog(parent)
{//设置无边框setWindowFlags(Qt::FramelessWindowHint | Qt::Dialog);//设置半透明背景setAttribute(Qt::WA_TranslucentBackground);//默认鼠标左键没有按下isMousePressed = false;}//析构函数
ShadowBorderWidget::~ShadowBorderWidget()
{}//鼠标按下事件
void ShadowBorderWidget::mousePressEvent(QMouseEvent *event)
{//鼠标左键移动和改变大小if (event->button() == Qt::LeftButton){isMousePressed = true;}//窗口移动的距离movePoint = event->globalPos() - pos();
}//鼠标释放事件
void ShadowBorderWidget::mouseReleaseEvent(QMouseEvent *)
{isMousePressed = false;
}//鼠标移动事件
void ShadowBorderWidget::mouseMoveEvent(QMouseEvent *event)
{//鼠标是否按下if (isMousePressed){QPoint movePos = event->globalPos();move(movePos - movePoint);}
}//重绘事件 设置阴影效果
void ShadowBorderWidget::paintEvent(QPaintEvent *)
{QPainterPath path;path.setFillRule(Qt::WindingFill);path.addRect(10, 10, this->width() - 20, this->height() - 20);QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true);painter.fillPath(path, QBrush(Qt::white));QColor color(0, 0, 0, 50);for (int i = 0; i < 10; i++){QPainterPath path;path.setFillRule(Qt::WindingFill);path.addRect(10 - i, 10 - i, width() - (10 - i) * 2, height() - (10 - i) * 2);color.setAlpha(150 - qSqrt(i) * 50);painter.setPen(color);painter.drawPath(path);}
}
04. 测试代码
main.cpp
#include "widget.h"
#include "shadowborderwidget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);ShadowBorderWidget *w1 = new ShadowBorderWidget;w1->show();return a.exec();
}
05. 示例下载
下载:【Qt】仿360安全卫士界面(自定义阴影边框类).rar
06. 附录
6.1 Qt教程汇总
网址:https://dengjin.blog.csdn.net/article/details/115174639
【Qt】仿360安全卫士界面(自定义阴影边框类)相关推荐
- QT仿360安全卫士9.1 qt creator5.7 最新
继360安全卫士9.1之后,应广大爱好者要求,持续升级! 此版本包括:主界面.换肤界面.新版特性界面.关于我们界面.登录界面(36..人人.新浪可切换).注册界面.系统托盘.多语化实现.边框阴影效果等 ...
- (源码)VC开发百分百仿360安全卫士界面,可换肤,可缩放
完全模仿360安全卫士的界面,可换肤,可缩放.其中包括360配置界面,360换肤界面360自定义滚动条,360托盘菜单,360新版特性界面等.可以兼容360安全卫士皮肤文件,使用VC开发,未使用除GD ...
- C#语言实例源码系列-仿360安全卫士界面
专栏分享 点击跳转=>Unity3D特效百例 点击跳转=>案例项目实战源码 点击跳转=>游戏脚本-辅助自动化 点击跳转=>Android控件全解手册
- WPF如何实现一款类似360安全卫士界面的程序?(共享源码!)
原文:WPF如何实现一款类似360安全卫士界面的程序?(共享源码!) 以前学习Windows Form编程的时候,总感觉自己做的界面很丑,看到360安全卫士.迅雷等软件的UI设计都非常美观,心里总是憧 ...
- Qt实现360安全卫士换肤功能
效果如下: 问题:标题的换肤背景未显示出来 要实现换肤功能,我们先创建一个基于drop_shadow_widget的护肤界面,我们将换肤界面分为上中下三部分.(drop_shadow_widget的功 ...
- Qt实现360安全卫士9.2
无私的分享.交流是我的宗旨,欢迎留言.欢迎讨论.欢迎批评指正. Qt实现360安全卫士9.1(旧版本): http://bbs.csdn.net/topics/390508293 Qt实现360安全卫 ...
- C#制作高仿360安全卫士窗体一
开始写这一系列博客之前先要向大家说声抱歉,放肆雷特建立很久却很少有更新.当然博客人气也不旺,大部分都是看的人多评论收藏的人少.一直想要改变这种状态,正好赶上了最近工作上做了一个高仿360安全卫士窗体. ...
- C#制作高仿360安全卫士窗体(四)- 水晶按钮
项目越来越紧,我也乐此不疲.自从上次C#制作高仿360安全卫士窗体(三)出来之后,就开始有一些人在说为什么还在坚持写这么落后的东西.我想说的是,我是从事企业信息化工作的,所有程序都只对内部使用.所以只 ...
- android 仿360浮动,Android仿360悬浮小球自定义view实现示例
Android仿360悬浮小球自定义view实现示例 效果图如下: 实现当前这种类似的效果 和360小球 悬浮桌面差不错类似.这种效果是如何实现的呢.废话不多说 ,直接上代码. 1.新建工程,添加悬浮 ...
最新文章
- 机器学习入门(12)— 激活函数层 ReLU、Sigmoid 层的实现
- 【CTF】实验吧 疑惑的汉字
- 80. Leetcode 1642. 可以到达的最远建筑 (堆-技巧三-事后小诸葛)
- ARCGIS10.1 插值分析结果按指定多边形输出
- 浅谈Android事件分发机制
- es 删除数据_es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?...
- ConcurrentHashMap的源码分析-CounterCells解释
- python树形_Python处理树形数组
- linux监控mysql性能,MySQL 性能监控4大指标——第二部分
- python 使用pymysql执行sql语句,使用try防止出错
- 监测div大小变化_CSS怎么实现div随着网页的大小变化而变化呢?
- JBoss企业级应用服务平台群集指南(一)
- mysql网络异常_网络连接配置出现异常_网络连接配置无法修复_Mysql网络连接的性能配置项...
- 你选书我买单,包邮送50本!《R语言实战》或者任何什么书都可以!
- centos lamp
- 我国光伏行业开始向东走
- 计算机操作系统--UNIX操作系统
- bert中最大处理序列长度超过512的处理策略
- zz淘宝笑到喷的评价
- Z39.50 图书信息检索
热门文章
- Fusioncharts图表组件在宿舍评分统计中的应用
- DataKeyNames
- [译]星际争霸人工智能比赛——规则
- C语言字符串-字符串排序
- java文件下载并添加水印_Java下载文件加文字水印(Excel、PDF、图片)
- 用户画像标签维度_神策数据钟秉哲:一文了解用户标签画像,从洞察到突破
- practical python and opencv_Practical Python and OpenCV + Case Studies
- Java黑皮书课后题第10章:10.3(MyInteger类)设计一个名为MyInteger的类
- Java黑皮书课后题第5章:**5.38(十进制转八进制)编写程序,提示用户输入一个十进制整数,然后显示对应的八进制值。(不要是使用Java的Integer类的任何方法)
- 计算机培训课程感悟,计算机应用基础课程学习体会