QPainterPath 不规则提示框(二)
2016-06-27 20:46
411 查看
前一篇讲过不规则提示框,但是提示框的方向是固定的,不能达到随意变换方向的效果,本接讲述可以动态变换方向的提示框
先看效果图
View Code
如此创建的提示窗口,在使用过程中需要用户根据箭头的指向 自己去移动窗口,paintEvent函数没有变化
================================================
前边介绍的这两种不规则图形的绘制都是直接绘制在窗口上的,接下来我再介绍一种绘制不规则图形的方式,只做大概讲述,具体实现代码我就不做过多的讲解 了,这种方式的原理就是贴图,我们把想要绘制的不规则图形先绘制到图片上,然后对图片做各种处理,比如旋转、镜像、平移等操作,然后在把图片绘制到窗口 上,这样做的好处是,这个不规则的形状可以随意变化,而不需要更改很多的代码。下面我写一下这种方式的伪代码
void 窗口重回函数()
{
根据QImage构造QPainter对象或者指针
构造如图1所示的不规则QPainterPath路径
使用绘图对象把该路径绘制到QImage上
使用绘图对象把QImage绘制到窗口上
}
先看效果图
QPainterPath rectPath, triPath; switch (posStyle) { case 1: { rectPath.addRoundRect(QRect(size.width() / 8 , size.height() / 2 , size.width() / 8 * 7 , size.height() / 2) , 10); triPath.moveTo(0, 0); triPath.lineTo(size.width() / 4, size.height() / 2); triPath.lineTo(size.width() / 8 * 3, size.height() / 2); triPath.lineTo(0, 0); } break; case 2: { rectPath.addRoundRect(QRect(0 , size.height() / 2 , size.width() / 8 * 7 , size.height() / 2) , 10); triPath.moveTo(size.width(), 0); triPath.lineTo(size.width() / 4 * 3, size.height() / 2); triPath.lineTo(size.width() / 8 * 5, size.height() / 2); triPath.lineTo(size.width(), 0); } break; case 3: { rectPath.addRoundRect(QRect(0 , 0 , size.width() / 8 * 7 , size.height() / 2) , 10); triPath.moveTo(size.width(), size.height()); triPath.lineTo(size.width() / 4 * 3, size.height() / 2); triPath.lineTo(size.width() / 8 * 5, size.height() / 2); triPath.lineTo(size.width(), size.height()); } break; case 4: { rectPath.addRoundRect(QRect(size.width() / 8 , 0 , size.width() / 8 * 7 , size.height() / 2) , 10); triPath.moveTo(0, size.height()); triPath.lineTo(size.width() / 4, size.height() / 2); triPath.lineTo(size.width() / 8 * 3, size.height() / 2); triPath.lineTo(0, size.height()); } break; } rectPath.addPath(triPath); //添加子闭合路径 return rectPath;
View Code
如此创建的提示窗口,在使用过程中需要用户根据箭头的指向 自己去移动窗口,paintEvent函数没有变化
================================================
前边介绍的这两种不规则图形的绘制都是直接绘制在窗口上的,接下来我再介绍一种绘制不规则图形的方式,只做大概讲述,具体实现代码我就不做过多的讲解 了,这种方式的原理就是贴图,我们把想要绘制的不规则图形先绘制到图片上,然后对图片做各种处理,比如旋转、镜像、平移等操作,然后在把图片绘制到窗口 上,这样做的好处是,这个不规则的形状可以随意变化,而不需要更改很多的代码。下面我写一下这种方式的伪代码
void 窗口重回函数()
{
根据QImage构造QPainter对象或者指针
构造如图1所示的不规则QPainterPath路径
使用绘图对象把该路径绘制到QImage上
使用绘图对象把QImage绘制到窗口上
}
相关文章推荐
- QPainterPath 不规则提示框
- 12_Endnote
- 11_Emotional factors
- 10_Research_methodology
- 9_The thesis
- 8_Advisors
- 7_Programming
- 6_talks
- 5_Writing
- 3_Learning other fields
- 2_Getting connected
- How To Do Research In the MIT AI Lab_1_Reading AI
- AIDL学习笔记(一)----基本类型
- WebLogic中的一些基本概念(Domain ,Server ,Admin Server等)
- 模拟器键盘Can't find keyplane that supports type 4 for keyboard iPhone-PortraitChoco-NumberPad
- .net async await
- win10 Failed to open/create the internal network 'HostInterfaceNetworking-VirtualBox Host
- webstrom Certificate validation failed
- 2016.6.27笔记(1)-多线程的wait,notify
- Leetcode-container-with-most-water