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. 安装vmtools之后任然不能在虚拟机和主机之间复制粘贴的问题

    安装vmtools之后任然不能在虚拟机和主机之间复制粘贴的问题 都是因为这个进程没有启动起来,你只需要在启动后在终端输入 "/usr/bin /vmware-user" 就可以手动 ...

  2. client_v1.go

    package nsqlookupd import (     "net" ) //客户端 结构体 type ClientV1 struct {     net.Conn //客户 ...

  3. 【缩点+拓扑判链】POJ2762 Going from u to v or from v to u?

    Description In order to make their sons brave, Jiajia and Wind take them to a big cave. The cave has ...

  4. Raft算法

    http://www.cnblogs.com/mindwind/p/5231986.html

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

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

  6. RocketMQ源码 — 十一、 RocketMQ事务消息

    分布式事务是一个复杂的问题,rmq实现了事务的最终一致性,rmq保证本地事务成功消息一定会发送成功并被成功消费,如果本地事务失败了,消息不会被发送. rmq事务消息的实现过程为: producer发送 ...

  7. 电梯调度设计之初感想——蔡迎盈&&曹玉松

    突然拿到这个问题,蒙了好久,索性走一步,再走一步好了,希望在这天下第一庄里,会看到晴空.   查了好多资料,终于还是整理出一个很草稿的版本,这只能算是我们初步的设计.   四部电梯载重和乘客限制不同, ...

  8. Applet web端对文件的读取方式

    转载:http://www.exam8.com/computer/Java/zonghe/200708/659876.html ---- 我们知道,在Java Applet中出于安全性考虑,Apple ...

  9. 关于EffictiveC++笔记

    我根据自己的理解,对原文的精华部分进行了提炼,并在一些难以理解的地方加上了自己的"可能比较准确"的「翻译」.

  10. GIL(全局解释器锁)

    GIL(全局解释器锁)     每个线程在执行的过程都需要先获取GIL     作用:在单核的情况下实现多任务(多线程),保证同一时刻只有一个线程可以执行代码,因此造成了我们使用多线程的时候无法实现并 ...