QPainterPath 不规则提示框
currentPosition()是最后一次绘制后的“结束点”(或初始点),使用moveTo()移动currentPosition()而不会添加任何元素。
QPainterPath 合并:
1、方法1:connectPath合并成一个路径,从第一个路径的最后一个点链接一条直线到第二个路径
2、方法2:addPath添加一个新路径作为子闭合路径
测试截图如下:
上代码:
准备工作,设置窗口背景透明、置顶、无边框
setWindowFlags(Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint); setAttribute(Qt::WA_TranslucentBackground);
QPainterPath rectPath;
rectPath.moveTo(50, 50);
rectPath.arcTo(0, 0, 50 * 2, 50 * 2, 180, 270);
绘制四分之三椭圆,arcTo参数含义:前两个参数表示椭圆外接举行左上定点坐标,第三和第四参数表示椭圆的宽和高,四五个参数表示绘制起始角度,参数六表示绘制总角度
QPainterPath rectPath2 = rectPath;
复制一个新的闭合路径,并偏移指定距离
rectPath2.translate(100, 100);
rectPath2.connectPath(rectPath); 连接两个闭合路径
QLinearGradient linear(rect().topLeft(),
rect().bottomRight()); 构造一个刷子,设置刷子起始位置
linear.setColorAt(0,
Qt::red);
linear.setColorAt(0.5,
Qt::green);
linear.setColorAt(1,
Qt::blue); 设置指定位置刷子颜色
painter.setPen(QPen(QColor(255, 255, 255, 0), 0,
Qt::SolidLine, Qt::FlatCap,
Qt::RoundJoin)); 设置画笔类型
painter.setBrush(linear);
painter.fillRect(rect(),
Qt::gray);
填充窗口背景色 方便观察(实际开发中以白色为宜)
painter.drawPath(rectPath);
使用addPath/connectPath方式时
该行代码不需要,因为该路径已经被合并到rectPath2
painter.drawPath(rectPath2);绘制制定闭合路径
不规则提示框如下
不规则提示框
代码如下
QPainter painter(this); QPainterPath rectPath; rectPath.addRoundRect(QRect(rect().width() / , rect().height() / , rect().width() / , rect().height() / ), ); QPainterPath triPath; triPath.moveTo(, ); triPath.lineTo(rect().width() / , rect().height() / ); triPath.lineTo(rect().width() / * , rect().height() / ); triPath.lineTo(, ); rectPath.addPath(triPath); 添加子闭合路径 QLinearGradient linear(rect().topLeft(), rect().bottomRight()); linear.setColorAt(, Qt::red); linear.setColorAt(0.5, Qt::green); linear.setColorAt(, Qt::blue); painter.setPen(QPen(QColor(, , , ), , Qt::SolidLine, Qt::FlatCap, Qt::RoundJoin)); painter.setBrush(linear); painter.fillRect(rect(), Qt::gray); painter.drawPath(rectPath);
最终效果
效果图
ui布局
rectPath.addRoundRect(QRect(rect().width() / 8,
rect().height() / 2
, rect().width() / 8 * 7, rect().height() / 2),
10);
QPainterPath 不规则提示框的更多相关文章
- QPainterPath 不规则提示框(二)
前一篇讲过不规则提示框,但是提示框的方向是固定的,不能达到随意变换方向的效果,本接讲述可以动态变换方向的提示框 先看效果图 图1 图2 图3 图4 如上图1所示,上一篇文章的代码可以达到类似效果 本 ...
- 利用CSS中的:after、: before制作的边三角提示框
小颖昨天分享了一篇参考bootstrap中的popover.js的css画消息弹框今天给大家再分享一篇使用:before和:after伪元素画消息弹框的CSS. 画出来是介个酱紫的: 有没有觉得画的萌 ...
- javascript-模板方法模式-提示框归一化插件
模板方法模式笔记 父类中定义一组算法操作骨架,而将一些实现步骤延迟到子类中,使得子类可以不改变父类的算法结构的同时可重新定义算法中某些实现步骤 实例:弹出框归一化插件 css样式 ;width ...
- 使用纯CSS实现带箭头的提示框
爱编程爱分享,原创文章,转载请注明出处,谢谢!http://www.cnblogs.com/fozero/p/6187323.html 1.全部代码 <!DOCTYPE html> < ...
- 纯css来实现提示框
用js用多了,就疏忽了最基本的css了---用title属性来实现提示框.下面言归正传------如何用css实现提示框: 1.利用title属性来实现鼠标滑过某个元素时,实现提示整段内容的功能(利用 ...
- js弹出框、对话框、提示框、弹窗总结
一.JS的三种最常见的对话框 //====================== JS最常用三种弹出对话框 ======================== //弹出对话框并输出一段提示信息 funct ...
- android标题栏上面弹出提示框(二) PopupWindow实现,带动画效果
需求:上次用TextView写了一个从标题栏下面弹出的提示框.android标题栏下面弹出提示框(一) TextView实现,带动画效果, 总在找事情做的产品经理又提出了奇葩的需求.之前在通知栏显示 ...
- android标题栏下面弹出提示框(一) TextView实现,带动画效果
产品经理用的是ios手机,于是android就走上了模仿的道路.做这个东西也走了一些弯路,写一篇博客放在这里,以后自己也可用参考,也方便别人学习. 弯路: 1.刚开始本来用PopupWindow去实现 ...
- 自定义iOS 中推送消息 提示框
看到标题你可能会觉得奇怪 推送消息提示框不是系统自己弹出来的吗? 为什么还要自己自定义呢? 因为项目需求是这样的:最近需要做 远程推送通知 和一个客服系统 包括店铺客服和官方客服两个模块 如果有新的消 ...
随机推荐
- Spring_boot简单操作数据库
Spring_boot搭配Spring Data JPA简单操作数据库 spring boot 配置文件可以使用yml文件,默认spring boot 会加载resources目录的下的applica ...
- windows部署SpiderKeeper(爬虫监控)
最近发现了一个spdierkeeper的库,这个库的主要用途是在于配合这scrpyd管理你的爬虫,支持一键式部署,定时采集任务,启动,暂停等一系列的操作.简单来说将scrapyd的api进行封装,最大 ...
- Java 学习笔记 (三) Java 日期类型
以下内容摘自: https://www.cnblogs.com/crazylqy/p/4172324.html import java.sql.Timestamp; import java.text ...
- 【k短路&A*算法】BZOJ1975: [Sdoi2010]魔法猪学院
Description 找出1~k短路的长度. Solution k短路的求解要用到A*算法 A*算法的启发式函数f(n)=g(n)+h(n) g(n)是状态空间中搜索到n所花的实际代价 h(n) ...
- 【Canal源码分析】Sink及Store工作过程
一.序列图 二.源码分析 2.1 Sink Sink阶段所做的事情,就是根据一定的规则,对binlog数据进行一定的过滤.我们之前跟踪过parser过程的代码,发现在parser完成后,会把数据放到一 ...
- Android性能优化-内存泄漏的8个Case
1为什么要做性能优化? 手机性能越来越好,不用纠结这些细微的性能? Android每一个应用都是运行的独立的Dalivk虚拟机,根据不同的手机分配的可用内存可能只有(32M.64M等),所谓的4GB. ...
- Twitter分布式自增ID算法snowflake原理解析
以JAVA为例 Twitter分布式自增ID算法snowflake,生成的是Long类型的id,一个Long类型占8个字节,每个字节占8比特,也就是说一个Long类型占64个比特(0和1). 那么一个 ...
- Dropwizard入门及开发步骤
Dropwizard介绍 Dropwizard结构的服务组成 开发步骤 Dropwizard介绍 Dropwizard是一个微服务框架, 是各项技术的一个集成封装.它包含了以下组件: 嵌入式Jetty ...
- 8天入门docker系列 —— 第四天 使用aspnetcore小案例熟悉端口映射和挂载目录
到目前为止大家应该对镜像和容器有了一个大概认知,而且也用了docker进行了一个简单化的部署,但仔细一看问题还有很多,所以这篇我们继续完善. 一:如何让外网访问到容器内应用 我们知道容器内拥有自己的子 ...
- JAVA基础第一章-初识java
业内经常说的一句话是不要重复造轮子,但是有时候,只有自己造一个轮子了,才会深刻明白什么样的轮子适合山路,什么样的轮子适合平地! 从今天开始,我将会持续更新java基础知识,欢迎关注. java的诞生 ...