currentPosition()是最后一次绘制后的“结束点”(或初始点),使用moveTo()移动currentPosition()而不会添加任何元素。

QPainterPath ​合并:

1、方法1:connectPath合并成一个路径,从第一个路径的最后一个点链接一条直线到第二个路径

2、方法2:addPath添加一个新路径作为子闭合路径

测试截图如下:

图1 addPath演示
图2 connectPath演示

上代码:

准备工作,设置窗口背景透明、置顶、无边框

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);绘制制定闭合路径

不规则提示框如下

图3
不规则提示框

代码如下

 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);

最终效果​

图4
效果图
图5
ui布局

​rectPath.addRoundRect(QRect(rect().width() / 8,
rect().height() / 2

, rect().width() / 8 * 7, rect().height() / 2),
10);

QPainterPath 不规则提示框的更多相关文章

  1. QPainterPath 不规则提示框(二)

    前一篇讲过不规则提示框,但是提示框的方向是固定的,不能达到随意变换方向的效果,本接讲述可以动态变换方向的提示框 先看效果图 图1 图2 图3 图4 如上图1所示,上一篇文章的代码可以达到类似效果 ​本 ...

  2. 利用CSS中的:after、: before制作的边三角提示框

    小颖昨天分享了一篇参考bootstrap中的popover.js的css画消息弹框今天给大家再分享一篇使用:before和:after伪元素画消息弹框的CSS. 画出来是介个酱紫的: 有没有觉得画的萌 ...

  3. javascript-模板方法模式-提示框归一化插件

    模板方法模式笔记   父类中定义一组算法操作骨架,而将一些实现步骤延迟到子类中,使得子类可以不改变父类的算法结构的同时可重新定义算法中某些实现步骤   实例:弹出框归一化插件 css样式 ;width ...

  4. 使用纯CSS实现带箭头的提示框

    爱编程爱分享,原创文章,转载请注明出处,谢谢!http://www.cnblogs.com/fozero/p/6187323.html 1.全部代码 <!DOCTYPE html> < ...

  5. 纯css来实现提示框

    用js用多了,就疏忽了最基本的css了---用title属性来实现提示框.下面言归正传------如何用css实现提示框: 1.利用title属性来实现鼠标滑过某个元素时,实现提示整段内容的功能(利用 ...

  6. js弹出框、对话框、提示框、弹窗总结

    一.JS的三种最常见的对话框 //====================== JS最常用三种弹出对话框 ======================== //弹出对话框并输出一段提示信息 funct ...

  7. android标题栏上面弹出提示框(二) PopupWindow实现,带动画效果

    需求:上次用TextView写了一个从标题栏下面弹出的提示框.android标题栏下面弹出提示框(一) TextView实现,带动画效果,  总在找事情做的产品经理又提出了奇葩的需求.之前在通知栏显示 ...

  8. android标题栏下面弹出提示框(一) TextView实现,带动画效果

    产品经理用的是ios手机,于是android就走上了模仿的道路.做这个东西也走了一些弯路,写一篇博客放在这里,以后自己也可用参考,也方便别人学习. 弯路: 1.刚开始本来用PopupWindow去实现 ...

  9. 自定义iOS 中推送消息 提示框

    看到标题你可能会觉得奇怪 推送消息提示框不是系统自己弹出来的吗? 为什么还要自己自定义呢? 因为项目需求是这样的:最近需要做 远程推送通知 和一个客服系统 包括店铺客服和官方客服两个模块 如果有新的消 ...

随机推荐

  1. 关于 行高lineheight的概念及与Vertical-align、内容框、基线等的关系

    1.关于行高 行高:顾名思意指一行文字的高度.具体来说是指两行文字间基线之间的距离,他也是底线和顶线之间距离   (1)内容区

  2. poj~1236 Network of Schools 强连通入门题

    一些学校连接到计算机网络.这些学校之间已经达成了协议: 每所学校都有一份分发软件的学校名单("接收学校"). 请注意,如果B在学校A的分发名单中,则A不一定出现在学校B的名单中您需 ...

  3. 测试APPEND INSERT是否产生UNDO信息的过程

    D:\>sqlplus test/testSQL*Plus: Release 11.1.0.6.0 - Production on 星期三 06月 29 19:46:41 2016Copyrig ...

  4. req_params.go

    , fmt.Sprintf("%s: closing %s", proto, listener.Addr())) }

  5. NSQ源码剖析之nsqd

    NSQ简介 NSQ 是实时的分布式消息处理平台,其设计的目的是用来大规模地处理每天数以十亿计级别的消息.NSQ 具有分布式和去中心化拓扑结构,该结构具有无单点故障.故障容错.高可用性以及能够保证消息的 ...

  6. ELK 架构之 Elasticsearch、Kibana、Logstash 和 Filebeat 安装配置汇总(6.2.4 版本)

    相关文章: ELK 架构之 Elasticsearch 和 Kibana 安装配置 ELK 架构之 Logstash 和 Filebeat 安装配置 ELK 架构之 Logstash 和 Filebe ...

  7. Go 实现 自动检索 API 错误码代码行 并 打印成文档,例 markDown 形式等

    作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguan ...

  8. (7)STM32使用HAL库实现RS485通讯(全双工串口)

    一.硬件 如下图所示,485芯片链接到单片机的USART2上,但是默认的USART2并不是在PD5和PD6上,这里是需要重映射的.另外PG4作为485收发的控制(在485协议中,RE.DE同时为高电平 ...

  9. 命令提示符编译java

    先新建一个文件夹kun,kun就是类所在的package.新建一个java文件. HelloWorld.java的代码如下: package kun; public class HelloWorld{ ...

  10. ceph 常见问题百科全书---luminous安装部署篇

    1. 执行步骤:ceph-deploy new node        机器:centos 7.5   ceph  Luminous版本     源:阿里云 问题: Traceback (most r ...