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. 解决 Scrapy-Redis 空跑问题,链接跑完后自动关闭爬虫

    Scrapy-Redis 空跑问题,redis_key链接跑完后,自动关闭爬虫 问题:scrapy-redis框架中,reids存储的xxx:requests已经爬取完毕,但程序仍然一直运行,如何自动 ...

  2. 选择排序SelectionSort

    转自https://www.cnblogs.com/shen-hua/p/5424059.html a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕. ...

  3. BZOJ_3191_[JLOI2013]卡牌游戏_概率DP

    BZOJ_3191_[JLOI2013]卡牌游戏_概率DP Description   N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随 ...

  4. 【游戏开发】Excel表格批量转换成lua的转表工具

    一.简介 在上篇博客<[游戏开发]Excel表格批量转换成CSV的小工具> 中,我们介绍了如何将策划提供的Excel表格转换为轻便的CSV文件供开发人员使用.实际在Unity开发中,很多游 ...

  5. maven+springmvc的配置

    1. 首先创建1个mavenweb项目  如果没有的话最好是去官网下载一个最新版本的eclipse  里面什么都有 maven/gradle 啥的 2. 选择路径   没啥影响 就是一个路径 默认就行 ...

  6. React从入门到放弃之前奏(5):ReactRouter4

    概念 安装:npm i -S react-router react-router-dom GitHub:ReactTraining/react-router React Router中有三种类型的组件 ...

  7. Django 基础一(安装和启动)

    在开始跟着本文学习Django进行Web开发之前你需要有一定的python编程基础,会用一些简单的Linux系统命令.如果你对python一无所知,请先去这个网站学习一下python编程的基础 Lin ...

  8. javascript && php &&java

    java && javascript && php 轰炸!!!恢复 1.javascript简介 *是基于对象和时间的驱动语言,应用于客户端. -----基于对象: * ...

  9. javascript && php &&java 轰炸!!!

    java && javascript && php 轰炸!!!恢复 1.javascript简介 *是基于对象和时间的驱动语言,应用于客户端. -----基于对象: * ...

  10. Java开源生鲜电商平台-团购模块设计与架构(源码可下载)

    Java开源生鲜电商平台-团购模块设计与架构(源码可下载) 说明:任何一个电商系统中,对于促销这块是必不可少的,毕竟这块是最吸引用户的,用户也是最爱的模块之一,理由很简单,便宜. 我的经验是无论是大的 ...