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 中推送消息 提示框
看到标题你可能会觉得奇怪 推送消息提示框不是系统自己弹出来的吗? 为什么还要自己自定义呢? 因为项目需求是这样的:最近需要做 远程推送通知 和一个客服系统 包括店铺客服和官方客服两个模块 如果有新的消 ...
随机推荐
- 绕过token
网站搭好了,下一步的目标就是直奔后台.因为一般前端在未登录的情况下只有查的功能.咱们的目标是增删改. 看到有添加功能时,先别着急的直接黑盒测试.先看看有没有防护 ######## 查看源码,搜索tok ...
- BZOJ_4197_[Noi2015]寿司晚宴_状态压缩动态规划
BZOJ_4197_[Noi2015]寿司晚宴_状态压缩动态规划 Description 为了庆祝 NOI 的成功开幕,主办方为大家准备了一场寿司晚宴.小 G 和小 W 作为参加 NOI 的选手,也被 ...
- python黑科技:还在为没有wifi而烦心吗?这篇文章解决你的困扰
python作为一门高级编程语言,它的定位是优雅.明确和简单.阅读Python编写的代码感觉像在阅读英语一样,这让使用者可以专注于解决问题而不是去搞明白语言本身.Python虽然是基于C语言编写,但是 ...
- CentOS 7下单机部署RabbltMQ环境的操作记录
一. RabbitMQ简单介绍 在日常工作环境中,你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用.通讯的问题而苦恼.挣扎?如果是,那么恭喜你,消息 ...
- Hadoop权限管理
1.Hadoop权限管理包括以下几个模块: (1) 用户分组管理.用于按组为单位组织管理,某个用户只能向固定分组中提交作业,只能使用固定分组中配置的资源:同时可以限制每个用户提交的作业数,使用的资源量 ...
- python-----HTMLTestRunner报告生成注意点!
简单的测试加HTMLTestRunner使用的具体方式如下:
- 计算机17-3,4作业C
C.Class Degisn Description 定义一个Circle类,有成员变量(或称之为域)x,y(圆心坐标)r(圆半径),成员方法intersect()两个圆是否相交的判断方法,和所需要的 ...
- Django基础四<二>(OneToMany和 ManyToMany,ModelForm)
上一篇博文是关于setting.py文件数据库的配置以及model与数据库表关系,实现了通过操作BlogUser,把BlogUser的信息存入后台数据库中.实际开发中有许多东西是相互联系的,除了数据的 ...
- 大白话5分钟带你走进人工智能-第三节最大似然推导mse损失函数(深度解析最小二乘来源)(1)
第三节最大似然推导mse损失函数(深度解析最小二乘来源) 在第二节中,我们介绍了高斯分布的 ...
- 软硬件协同编程 - C#玩转CPU高速缓存(附示例)
写在前面 好久没有写博客了,一直在不断地探索响应式DDD,又get到了很多新知识,解惑了很多老问题,最近读了Martin Fowler大师一篇非常精彩的博客The LMAX Architecture, ...