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安全卫士界面(自定义阴影边框类)相关推荐

  1. QT仿360安全卫士9.1 qt creator5.7 最新

    继360安全卫士9.1之后,应广大爱好者要求,持续升级! 此版本包括:主界面.换肤界面.新版特性界面.关于我们界面.登录界面(36..人人.新浪可切换).注册界面.系统托盘.多语化实现.边框阴影效果等 ...

  2. (源码)VC开发百分百仿360安全卫士界面,可换肤,可缩放

    完全模仿360安全卫士的界面,可换肤,可缩放.其中包括360配置界面,360换肤界面360自定义滚动条,360托盘菜单,360新版特性界面等.可以兼容360安全卫士皮肤文件,使用VC开发,未使用除GD ...

  3. C#语言实例源码系列-仿360安全卫士界面

    专栏分享 点击跳转=>Unity3D特效百例 点击跳转=>案例项目实战源码 点击跳转=>游戏脚本-辅助自动化 点击跳转=>Android控件全解手册

  4. WPF如何实现一款类似360安全卫士界面的程序?(共享源码!)

    原文:WPF如何实现一款类似360安全卫士界面的程序?(共享源码!) 以前学习Windows Form编程的时候,总感觉自己做的界面很丑,看到360安全卫士.迅雷等软件的UI设计都非常美观,心里总是憧 ...

  5. Qt实现360安全卫士换肤功能

    效果如下: 问题:标题的换肤背景未显示出来 要实现换肤功能,我们先创建一个基于drop_shadow_widget的护肤界面,我们将换肤界面分为上中下三部分.(drop_shadow_widget的功 ...

  6. Qt实现360安全卫士9.2

    无私的分享.交流是我的宗旨,欢迎留言.欢迎讨论.欢迎批评指正. Qt实现360安全卫士9.1(旧版本): http://bbs.csdn.net/topics/390508293 Qt实现360安全卫 ...

  7. C#制作高仿360安全卫士窗体一

    开始写这一系列博客之前先要向大家说声抱歉,放肆雷特建立很久却很少有更新.当然博客人气也不旺,大部分都是看的人多评论收藏的人少.一直想要改变这种状态,正好赶上了最近工作上做了一个高仿360安全卫士窗体. ...

  8. C#制作高仿360安全卫士窗体(四)- 水晶按钮

    项目越来越紧,我也乐此不疲.自从上次C#制作高仿360安全卫士窗体(三)出来之后,就开始有一些人在说为什么还在坚持写这么落后的东西.我想说的是,我是从事企业信息化工作的,所有程序都只对内部使用.所以只 ...

  9. android 仿360浮动,Android仿360悬浮小球自定义view实现示例

    Android仿360悬浮小球自定义view实现示例 效果图如下: 实现当前这种类似的效果 和360小球 悬浮桌面差不错类似.这种效果是如何实现的呢.废话不多说 ,直接上代码. 1.新建工程,添加悬浮 ...

最新文章

  1. 机器学习入门(12)— 激活函数层 ReLU、Sigmoid 层的实现
  2. 【CTF】实验吧 疑惑的汉字
  3. 80. Leetcode 1642. 可以到达的最远建筑 (堆-技巧三-事后小诸葛)
  4. ARCGIS10.1 插值分析结果按指定多边形输出
  5. 浅谈Android事件分发机制
  6. es 删除数据_es 写入数据的工作原理是什么啊?es 查询数据的工作原理是什么啊?...
  7. ConcurrentHashMap的源码分析-CounterCells解释
  8. python树形_Python处理树形数组
  9. linux监控mysql性能,MySQL 性能监控4大指标——第二部分
  10. python 使用pymysql执行sql语句,使用try防止出错
  11. 监测div大小变化_CSS怎么实现div随着网页的大小变化而变化呢?
  12. JBoss企业级应用服务平台群集指南(一)
  13. mysql网络异常_网络连接配置出现异常_网络连接配置无法修复_Mysql网络连接的性能配置项...
  14. 你选书我买单,包邮送50本!《R语言实战》或者任何什么书都可以!
  15. centos lamp
  16. 我国光伏行业开始向东走
  17. 计算机操作系统--UNIX操作系统
  18. bert中最大处理序列长度超过512的处理策略
  19. zz淘宝笑到喷的评价
  20. Z39.50 图书信息检索

热门文章

  1. Fusioncharts图表组件在宿舍评分统计中的应用
  2. DataKeyNames
  3. [译]星际争霸人工智能比赛——规则
  4. C语言字符串-字符串排序
  5. java文件下载并添加水印_Java下载文件加文字水印(Excel、PDF、图片)
  6. 用户画像标签维度_神策数据钟秉哲:一文了解用户标签画像,从洞察到突破
  7. practical python and opencv_Practical Python and OpenCV + Case Studies
  8. Java黑皮书课后题第10章:10.3(MyInteger类)设计一个名为MyInteger的类
  9. Java黑皮书课后题第5章:**5.38(十进制转八进制)编写程序,提示用户输入一个十进制整数,然后显示对应的八进制值。(不要是使用Java的Integer类的任何方法)
  10. 计算机培训课程感悟,计算机应用基础课程学习体会