您的位置:首页 > 大数据 > 人工智能

QPainterPath 不规则提示框(二)

2016-06-27 20:46 411 查看
前一篇讲过不规则提示框,但是提示框的方向是固定的,不能达到随意变换方向的效果,本接讲述可以动态变换方向的提示框

先看效果图

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绘制到窗口上​

}​

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: