Qt 窗口阴影边框

环境:Qt 5.15 + VS2019

方法一:QGraphicsDropShadowEffect

实现方法参考链接:https://blog.csdn.net/goforwardtostep/article/details/99549750
使用此方法添加窗口阴影,会出现警告信息:
在这里插入图片描述
且窗口最大化与还原切换时会出现子控件刷新问题:
在这里插入图片描述

方法二:九宫格贴图

实现方法参考链接:https://blog.csdn.net/goforwardtostep/article/details/99549750
需要美工

方法三:paintEvent

实现方法参考链接:https://blog.csdn.net/goforwardtostep/article/details/99549750
此方法绘制圆角边框不够完美
下图右边为paintEvent使用addRoundedRect实现,左边为结合九宫格思想通过paintEvent实现
在这里插入图片描述
下面为上图右侧实现代码:
app_window.h

#ifndef APP_WINDOW_H
#define APP_WINDOW_H#include <QWidget>namespace Ui {
class AppWindow;
}class AppWindow : public QWidget
{Q_OBJECTpublic:explicit AppWindow(QWidget *parent = nullptr);~AppWindow();protected:void paintEvent(QPaintEvent* event) override;private:Ui::AppWindow *ui;//阴影宽度int shadowWidth_ = 15;//窗口圆角int windowRadius_ = 9;
};#endif // APP_WINDOW_H

app_window.cpp

#include "app_window.h"
#include "ui_app_window.h"
#include <QPainter>
#include <QPainterPath>AppWindow::AppWindow(QWidget *parent): QWidget(parent), ui(new Ui::AppWindow)
{ui->setupUi(this);setAttribute(Qt::WA_TranslucentBackground); // 背景透明setWindowFlags(Qt::Window | Qt::FramelessWindowHint);QString qss = QString("background-color: rgb(255, 255, 255); border-radius:%1px").arg(windowRadius_);ui->widgetMain->setStyleSheet(qss);ui->gridLayout->setMargin(shadowWidth_);
}AppWindow::~AppWindow()
{delete ui;
}void AppWindow::paintEvent(QPaintEvent *event)
{int radius = shadowWidth_ + windowRadius_;int width = this->width();int height = this->height();QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true); //抗锯齿painter.setPen(Qt::NoPen);//线性渐变QLinearGradient linearGradient;linearGradient.setColorAt(0,QColor(255,0,0, 250));linearGradient.setColorAt(1,QColor(255,0,0, 50));//圆形渐变QRadialGradient radialGradient;radialGradient.setColorAt(0,QColor(255,0,0, 250));radialGradient.setColorAt(1,QColor(255,0,0, 50));//左上角radialGradient.setCenter(radius, radius); //中心点radialGradient.setRadius(radius); //半径radialGradient.setFocalPoint(radius, radius); //焦点painter.setBrush(radialGradient);QRectF rectf(0, 0, radius*2, radius*2);QPainterPath path;path.moveTo(radius, radius);//移动圆心path.arcTo(rectf, 90, 90);painter.drawPath(path);   //画路径(扇形)//左边linearGradient.setStart(radius, height/2);linearGradient.setFinalStop(0, height/2);painter.setBrush(linearGradient);path.clear();path.addRect(0, radius, radius, height - radius*2);painter.drawPath(path);//左下角radialGradient.setCenter(radius, height - radius); //中心点radialGradient.setRadius(radius); //半径radialGradient.setFocalPoint(radius, height - radius); //焦点painter.setBrush(radialGradient);path.clear();path.moveTo(radius, height - radius);//移动圆心rectf.setRect(0, height - radius*2, radius*2, radius*2);path.arcTo(rectf, 180, 90);painter.drawPath(path);   //画路径(扇形)//下边linearGradient.setStart(width/2, height - radius);linearGradient.setFinalStop(width/2, height);painter.setBrush(linearGradient);path.clear();path.addRect(radius, height - radius, width - radius*2, radius);painter.drawPath(path);//右下角radialGradient.setCenter(width - radius, height - radius); //中心点radialGradient.setRadius(radius); //半径radialGradient.setFocalPoint(width - radius, height - radius); //焦点painter.setBrush(radialGradient);path.clear();path.moveTo(width - radius, height - radius);//移动圆心rectf.setRect(width - radius*2, height - radius*2, radius*2, radius*2);path.arcTo(rectf, 270, 90);painter.drawPath(path);   //画路径(扇形)//右边linearGradient.setStart(width - radius, height/2);linearGradient.setFinalStop(width, height/2);painter.setBrush(linearGradient);path.clear();path.addRect(width - radius, radius, radius, height - radius*2);painter.drawPath(path);//右上角radialGradient.setCenter(width - radius, radius); //中心点radialGradient.setRadius(radius); //半径radialGradient.setFocalPoint(width - radius, radius); //焦点painter.setBrush(radialGradient);path.clear();path.moveTo(width - radius, radius);//移动圆心rectf.setRect(width - radius*2, 0, radius*2, radius*2);path.arcTo(rectf, 0, 90);painter.drawPath(path);   //画路径(扇形)//上边linearGradient.setStart(height/2, radius);linearGradient.setFinalStop(height/2, 0);painter.setBrush(linearGradient);path.clear();path.addRect(radius, 0, width - radius*2, radius);painter.drawPath(path);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/235630.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HCIA-Datacom题库(自己整理分类的)_09_Telent协议【13道题】

一、单选 1.某公司网络管理员希望能够远程管理分支机构的网络设备&#xff0c;则下面哪个协议会被用到&#xff1f; RSTP CIDR Telnet VLSM 2.以下哪种远程登录方式最安全&#xff1f; Telnet Stelnet v100 Stelnet v2 Stelnet v1 解析&#xff1a; Telnet 明文传输…

spring Security源码讲解-Sevlet过滤器调用springSecurty过滤器的流程

承接上文 上一节 http://t.csdnimg.cn/ueSAl 最后讲到了过滤器收集完成注入容器&#xff0c;这节我们来讲Security的Filter是怎么被Spring调用的。 我们先看webSecurity的performBuild方法(), 也就是说&#xff0c;最终返回的过滤器对象实例有两种情况当我们配置debugEnabl…

NIO通信代码示例

NIO通信架构图 1.Client NioClient package nio;import constant.Constant;import java.io.IOException; import java.util.Scanner;public class NioClient {private static NioClientHandle nioClientHandle;public static void start() {nioClientHandle new NioClientHa…

MongoDB快速实战与基本原理

MongoDB 介绍 什么是 MongoDB MongoDB 是一个文档数据库&#xff08;以 JSON 为数据模型&#xff09;&#xff0c;由 C 语言编写&#xff0c;旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。文档来自于“JSON Document”&#xff0c;并非我们一般理解的 PDF、WORD 文档…

【数据采集与预处理】流数据采集工具Flume

目录 一、Flume简介 &#xff08;一&#xff09;Flume定义 &#xff08;二&#xff09;Flume作用 二、Flume组成架构 三、Flume安装配置 &#xff08;一&#xff09;下载Flume &#xff08;二&#xff09;解压安装包 &#xff08;三&#xff09;配置环境变量 &#xf…

python高校舆情分析系统+可视化+情感分析 舆情分析+Flask框架(源码+文档)✅

毕业设计&#xff1a;2023-2024年计算机专业毕业设计选题汇总&#xff08;建议收藏&#xff09; 毕业设计&#xff1a;2023-2024年最新最全计算机专业毕设选题推荐汇总 &#x1f345;感兴趣的可以先收藏起来&#xff0c;点赞、关注不迷路&#xff0c;大家在毕设选题&#xff…

适用于 Windows 的 12 个最佳免费磁盘分区管理器软件

分区是与其他部分分开的硬盘驱动器部分。它使您能够将硬盘划分为不同的逻辑部分。分区软件是一种工具&#xff0c;可帮助您执行基本选项&#xff0c;例如创建、调整大小和删除物理磁盘的分区。许多此类程序允许您更改磁盘片的标签以便于识别数据。 适用于 Windows 的 12 个最佳…

【PaperReading】3. PTP

Category Content 论文题目 Position-guided Text Prompt for Vision-Language Pre-training Code: ptp 作者 Alex Jinpeng Wang (Sea AI Lab), Pan Zhou (Sea AI Lab), Mike Zheng Shou (Show Lab, National University of Singapore), Shuicheng Yan (Sea AI Lab) 另一篇…

爬虫01-爬虫原理以及爬虫前期准备工作

文章目录 1 爬虫基本原理什么是爬虫爬虫功能详解爬虫基本流程两个概念&#xff1a;request和response 2 一些问题爬虫能抓取什么样的数据&#xff1f;抓取的数据怎么提取部分内容&#xff1f;数据解析方式。为什么我爬虫抓取的数据和浏览器看到的不一样怎样解决JavaScript渲染的…

计算数学表达式的程序(Java课程设计)

1. 课设团队介绍 团队名称 团队成 员介绍 任务分配 团队成员博客 XQ Warriors 徐维辉 负责计算器数据的算法操作&#xff0c;如平方数、加减乘除&#xff0c;显示历史计算记录 无 邱良厦&#xff08;组长&#xff09; 负责计算器的图形设计&#xff0c;把输入和结果显…

公共用例库计划--个人版(二)主体界面设计

1、任务概述 计划内容&#xff1a;完成公共用例库的开发实施工作&#xff0c;包括需求分析、系统设计、开发、测试、打包、运行维护等工作。 1.1、 已完成&#xff1a; 需求分析、数据库表的设计&#xff1a;公共用例库计划–个人版&#xff08;一&#xff09; 1.2、 本次待完…

2024新年烟花代码完整版

文章目录 前言烟花效果展示使用教程查看源码HTML代码CSS代码JavaScript 新年祝福 前言 在这个充满希望和激动的2024年&#xff0c;新的一年即将拉开帷幕&#xff0c;而数字科技的创新与发展也如火如荼。烟花绚丽多彩的绽放&#xff0c;一直以来都是新年庆典中不可或缺的元素。…

微信小程序 组件component ts用法

还在为 使用了ts 但是组件内显示this.setData/this.data.xxx ts报错 觉得难看吗&#xff1f; 还在为明明定义了applyInfo&#xff0c;明明应该有setData为何报错&#xff1f; 还在为不知道如何写类型而烦心吗&#xff1f; 不如转变思路将methods看成为一个对象 增加断言 as a…

实现多级缓存(Redis+Caffeine)

文章目录 多级缓存的概述多级缓存的优势 多级缓存的概述 在高性能的服务架构设计中&#xff0c;缓存是一个不可或缺的环节。在实际的项目中&#xff0c;我们通常会将一些热点数据存储到Redis或MemCache这类缓存中间件中&#xff0c;只有当缓存的访问没有命中时再查询数据库。在…

公网环境使用移动端设备+cpolar远程访问本地群晖nas上的影视资源

文章目录 1.使用环境要求&#xff1a;2.下载群晖videostation&#xff1a;3.公网访问本地群晖videostation中的电影&#xff1a;4.公网条件下使用电脑浏览器访问本地群晖video station5.公网条件下使用移动端&#xff08;搭载安卓&#xff0c;ios&#xff0c;ipados等系统的设备…

小家电应用解决方案以及选型指南

电磁炉是现代厨房中常见的一种小家电产品&#xff0c;它利用电磁感应加热原理&#xff0c;可以快速、高效地进行烹饪。在电磁炉的设计和制造过程中&#xff0c;功率开关芯片的选择对于产品的性能和成本有着重要的影响。 针对电磁炉的应用需求&#xff0c;推荐采用LED驱动芯片S…

蓝桥杯省赛无忧 STL 课件12 vector

01 vector的定义和特性 02 vector的常用函数 03 vector排序去重 示例&#xff1a; #include<bits/stdc.h> using namespace std; int main(){vector<int> vec {5,2,8,1,9};sort(vec.begin(),vec.end());for(const auto& num : vec){cout<<num<<&q…

Centos7升级openssl到openssl1.1.1

Centos7升级openssl到openssl1.1.1 1、先查看openssl版本&#xff1a;openssl version 2、Centos7升级openssl到openssl1.1.1 升级步骤 #1、更新所有现有的软件包列表并安装最新的软件包&#xff1a; $sudo yum update #2、接下来&#xff0c;我们需要从源代码编译和构建OpenS…

【原生部署】SpringBoot+Vue前后端分离项目

本次主要讲解SpringBootVue前后端完全分离项目在CentOS云服务器上的环境搭建与部署过程&#xff0c;我们主要讲解原生部署。 一.原生部署概念 原生部署是指将应用程序&#xff08;一般是指软件、应用或服务&#xff09;在底层的操作系统环境中直接运行和部署&#xff0c;而不…

微软Office 2019 批量授权版

软件介绍 微软办公软件套件Microsoft Office 2019 专业增强版2024年1月批量许可版更新推送&#xff01;Office2019正式版2018年10月份推出&#xff0c;主要为多人跨平台办公与团队协作打造。Office2019整合对过去三年在Office365里所有功能&#xff0c;包括对Word、Excel、Pow…