Qt实现圆形窗口
重新实现paintEvent()函数。
效果如下:

效果为蓝色区域,背景是vs接面,代码直接复制可用,留给有需要的人。
#ifndef CircleWidget_h__
#define CircleWidget_h__#include <QWidget>class CCircleWidget : public QWidget
{Q_OBJECTpublic:explicit CCircleWidget(QWidget* parent = 0); // explicit 避免歧义CCircleWidget(const QString& strImagePath, int nRadius, QWidget* parent = 0);public:void SetNormalOutLineColor(QColor color);void SetHoverOutLineColor(QColor color);void SetPressedOutLineColor(QColor color);void SetOutLineWidth(int nWidth);void SetImagePath(const QString& strImagePath);void SetHovered(bool bHovered);void SetPressed(bool bPressed);protected: // overridevoid Init();void paintEvent(QPaintEvent*) override; // 绘图事件,调用update()时触发void mousePressEvent(QMouseEvent* e) override; // 鼠标按下事件void mouseReleaseEvent(QMouseEvent* e) override; // 鼠标释放事件void enterEvent(QEvent*) override; // 鼠标进入事件void leaveEvent(QEvent*) override; // 鼠标离开事件signals:void SigClicked(); // 点击信号private:QString m_strImagePath; // 图片路径QColor m_normalColor;QColor m_hoverColor;QColor m_pressedColor;int m_nWidth;int m_nRadius; // 圆形半径bool m_bPressed; // 左键单击控制bool m_bHovered; // 鼠标悬停控制
};#endif // CircleWidget_h__
#include "CircleWidget.h"
#include <QPainter>
#include <QMouseEvent>CCircleWidget::CCircleWidget(QWidget* parent): QWidget(parent), m_strImagePath(":/dotnetIcon.png"), m_normalColor("#58a3ef"), m_hoverColor("#6eb8f5"), m_pressedColor("#417cac"), m_nWidth(4), m_nRadius(46), m_bPressed(false), m_bHovered(false)
{Init();
}CCircleWidget::CCircleWidget(const QString& strImagePath, int nRadius, QWidget* parent): QWidget(parent), m_strImagePath(strImagePath), m_normalColor("#58a3ef"), m_hoverColor("#6eb8f5"), m_pressedColor("#417cac"), m_nWidth(4), m_nRadius(nRadius), m_bPressed(false), m_bHovered(false)
{Init();
}void CCircleWidget::SetNormalOutLineColor(QColor color)
{m_normalColor = color;
}void CCircleWidget::SetHoverOutLineColor(QColor color)
{m_hoverColor = color;
}void CCircleWidget::SetPressedOutLineColor(QColor color)
{m_pressedColor = color;
}void CCircleWidget::SetOutLineWidth(int nWidth)
{m_nWidth = nWidth;
}void CCircleWidget::SetImagePath(const QString& strImagePath)
{m_strImagePath = strImagePath;
}void CCircleWidget::SetHovered(bool bHovered)
{m_bHovered = bHovered;update();
}void CCircleWidget::SetPressed(bool bPressed)
{m_bPressed = bPressed;update();
}void CCircleWidget::Init()
{// 无边框setWindowFlags(Qt::FramelessWindowHint);// 窗口背景透明setAttribute(Qt::WA_TranslucentBackground, true);
}void CCircleWidget::paintEvent(QPaintEvent*)
{QPainter p(this);p.setRenderHint(QPainter::Antialiasing);QPen pen;pen.setWidth(m_nWidth);if (m_bPressed){pen.setColor("#417cac"); // 按下时的边框颜色}else if (m_bHovered){pen.setColor("#6eb8f5"); // 悬停时的边框颜色}else{pen.setColor("#58a3ef"); // 正常状态的边框颜色}p.setPen(pen);p.setBrush(Qt::NoBrush);// 设置圆心为圆的半径,以确保圆形完整显示//QPoint center(m_nRadius + m_nWidth / 2, m_nRadius + m_nWidth / 2);QPoint center(rect().center());// 绘制背景圆形p.drawEllipse(center, m_nRadius, m_nRadius);// 绘制图片QPixmap pixmap(m_strImagePath);QRect imageRect(0, 0, 2 * m_nRadius, 2 * m_nRadius); // 计算图片绘制区域QPainterPath clipPath;clipPath.addEllipse(center, m_nRadius, m_nRadius);p.setClipPath(clipPath);p.drawPixmap(center.x() - m_nRadius, center.y() - m_nRadius, imageRect.width(), imageRect.height(), pixmap);
}void CCircleWidget::mousePressEvent(QMouseEvent* e)
{m_bPressed = true;update();
}void CCircleWidget::mouseReleaseEvent(QMouseEvent* e)
{m_bPressed = false;update();
}void CCircleWidget::enterEvent(QEvent*)
{m_bHovered = true;update();
}void CCircleWidget::leaveEvent(QEvent*)
{m_bHovered = false;update();
}
相关文章:
Qt实现圆形窗口
重新实现paintEvent()函数。 效果如下: 效果为蓝色区域,背景是vs接面,代码直接复制可用,留给有需要的人。 #ifndef CircleWidget_h__ #define CircleWidget_h__#include <QWidget>class CCircleWidget : public QWidget {Q…...
LeetCode 算法:有效的括号 c++
原题链接🔗:有效的括号 难度:简单⭐️ 题目 给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。 有效字符串需满足: …...
react和vue的diff算法的差别
React 的 Diff 算法 React 的 diff 算法主要基于以下几个原则: 同层比较: React 只会比较同一层级的节点,不会跨层级比较。假设跨层级的变化较少,从而简化了算法,提高了性能。 深度优先遍历: React 采用深…...
算法【滑动窗口】
滑动窗口指的是维持左、右边界都不回退的一段范围,来求解很多子数组(串)的相关问题。 滑动窗口的关键是找到范围和答案指标之间的单调性关系(类似贪心)。 滑动过程:滑动窗口可以用简单变量或者结构来维护…...
【RISC-V设计-06】- RISC-V处理器设计K0A之ALU
【RISC-V设计-06】- RISC-V处理器设计K0A之ALU 文章目录 【RISC-V设计-06】- RISC-V处理器设计K0A之ALU1.简介2.顶层设计3.内部结构4.端口说明5.操作码说明6.设计代码7.总结 1.简介 算术逻辑单元(Arithmetic Logic Unit,简称 ALU)是计算机中…...
MyIP:强大且简单好用!
在这个数字化的时代,IP地址就像是我们的网络身份证。各位在日常的工作中,肯定会会遇到需要和 IP 地址相关的需求。 今天和大家聊一聊一个非常好用的开源 IP 工具项目 - MyIP。 简介 MyIP一个开源IP工具箱,提供了一系列的网络检测工具&…...
Redis作为缓存,如何与MySql的数据进行同步?
允许延时一致的业务 概念 采用异步通知使用MQ作为中间件,更新数据之后通知缓存删除利用canal中间件,不需要修改业务代码,伪装成Mysql的一个从节点,canal通过读取binlog数据更新缓存 强一致性业务 概念 采用Redission提供的读写锁…...
Android 通知栏推送功能
Android 通知栏推送功能 Android 通知栏推送功能 让消息在用户的通知栏上显示,并且点击后跳转到指定的页面 MainActivity.Java import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; import andro…...
【LVS】防火墙mark标记解决调度问题
实验环境是在之前部署DR模式集群的基础上做的,参考如下 部署DR模式集群 以http和https为例,当我们在webserver中同时开放80和443端口,那么默认控制是分开轮询的,就会出现了一个轮询错乱的问题: 当第一次访问80被轮询…...
算法笔记|Day20回溯算法II
算法笔记|Day20回溯算法II ☆☆☆☆☆leetcode 39. 组合总和题目分析代码 ☆☆☆☆☆leetcode 40.组合总和II题目分析代码 ☆☆☆☆☆leetcode 131.分割回文串题目分析代码 ☆☆☆☆☆leetcode 39. 组合总和 题目链接:leetcode 39. 组合总和 题目分析 本题采用回…...
Oracle认证1Z0-071线上考试注意事项
目录 一、前言二、回顾过往战绩第一次 裸考🐒第二次 背题库硬考!🐒第三次 软件卡住,寄!🙈第四次 汇总纠错,通过!🌚 三、考试流程四、考试注意事项1. 是否需要科学上网2. …...
【C++ 面试 - 基础题】每日 3 题(八)
✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏&…...
影响LabVIEW工作效率的因素有哪些
影响LabVIEW工作效率的因素可以分为多个方面,涵盖硬件、软件、开发环境和编程习惯等。以下是一些常见的影响因素: 1. 硬件因素 处理器性能:处理器的速度和核心数量对LabVIEW程序的执行效率有很大影响。 内存大小:足够的内存可以保…...
linux 裸机.之SPV5210,dnw,usb,sdk,fastboot刷机(一)
linux 裸机.之SPV5210,dnw,usb,sdk,fastboot刷机(一)...
性能测试工具LoadRunner
前言👀~ 上一章我们介绍了性能测试的一些基本概念,重要的是性能测试的各项指标,今天我们使用性能测试工具LoadRunner简单的完成一次性能测试 性能测试Load Runner LoadRunner是什么? LoadRunner安装 LoadRunner脚本录制 1.录…...
智能归来:深入探索人工智能回归模型的奥秘
人工智能之回归模型 1. 回归模型的数学基础1.1 回归分析的基本原理1.1.1 目标变量与预测变量的关系1.1.2 线性回归模型 1.2 矩阵形式的回归模型1.2.1 回归方程的矩阵表示1.2.2 矩阵运算的基本性质及其在回归分析中的应用 1.3 总结 2. 最小二乘法 (Ordinary Least Squares, OLS)…...
swift 中,对象() 和 对象.init() 的共同点和异同点
在阅读同事的代码时,不同人对对象的初始化方式是不一样的,例如存在一个对象AController, 有些人创建的方式如下: let controller AController()也有人创建的方式如下: let controller AController.init()下面来说明一下&#…...
Google安装JSON-handle扩展
JSON-hande下载地址: JSON-Handle 官网 - 打开json格式文件的浏览编辑器 1. 重命名扩展文件(crx)后缀 为 zip。 2. 解压zip成文件夹,保存到指定目录。 3. Google浏览器地址栏输入 “chrome://extensions/”回车。然后开启 开发者模式。 4. 点击“加载…...
剖析算法内部结构----------贪心算法
什么是贪心算法? 贪心算法(Greedy Algorithm)是一种在问题求解过程中,每一步都采取当前状态下最优(即最有利)的选择,从而希望导致最终的全局最优解的算法策略。 贪心算法的核心思想是做选择时&…...
uni-app开发微信小程序注意事项,不要用element-ui
前端扩展组件千万不要用element-ui,开发的时候不报错,发布的时候会报错无法发布。 可以用vant weapp【注意是weapp】 iView weapp 附上hbuilder官方文档 组件的概念 | uni-app官网 (dcloud.net.cn)...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
