Qt 如何实现"荧光笔"的效果,求思路或者实现

mct123 2013-09-17 01:23:51
想实现效果

我在绘图时,使用QColor(0,255,0,150)
效果如下

有点半透明的感觉,但颜色是一深一浅的,如果画得慢的话是实心的,请高手指点一下怎么
解决
...全文
531 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mct123 2013-10-23
  • 打赏
  • 举报
回复
非常感谢大家,特别是4楼shy_wing我使用了4楼的方法实现了类似的效果
但还有一个小问题

注意交叉点,当一个地方被画了多遍后,颜色像是在叠加的感觉,不知大家有什么好的方法.

void ColorPen::mousePressEvent(QMouseEvent *event)
{
startPoint = event->pos() - imageStartPoint;
tempImage = *image;
path.moveTo(startPoint/scaleFactor);
}

//任意画时也是画在临时图片上,而释放时才画在图片上
void ColorPen::mouseMoveEvent(QMouseEvent *event)
{
*isShowImage = false;
tempImage = *image;//每次画都是在原来图片的基础上把path画一遍
stopPoint = event->pos() - imageStartPoint;
path.lineTo(stopPoint/scaleFactor);
paint();
image->setIsModified(true);
}

void ColorPen::mouseReleaseEvent(QMouseEvent *event)
{
*isShowImage = true;
//铅笔的内容在临时图片上
//父类对象赋给子类对象的指针指向
*(QImage*)image = tempImage;
initData();
}
void ColorPen::paint()
{
QPainter painter;
if(*isShowImage)
{
painter.begin(image);
}
else
{
painter.begin(&tempImage);
}
painter.setRenderHint(QPainter::Antialiasing,true);
QColor color = pen.color();
color.setAlpha(100);
pen.setColor(color);
pen.setCapStyle(Qt::RoundCap);
pen.setJoinStyle(Qt::RoundJoin);
pen.setWidth(20);

painter.setPen(pen);
painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
painter.setRenderHint(QPainter::Antialiasing);
painter.drawPath(path);

painter.end();
QWidget* parent = qobject_cast<QWidget *>(this->parent());
parent->update();
startPoint = stopPoint;
}
void ColorPen::initData()
{
startPoint = QPoint(0,0);
stopPoint = startPoint;
path = QPainterPath();
}
mct123 2013-09-23
  • 打赏
  • 举报
回复
感谢楼上二位的热心帮助,我找了qt提供的关于CompositionMode的例子,试验了所有的组合情况,没有出现我想要的效果啊,还麻烦二位高人能给出实现的代码让小弟学习一下。
狂风暴雨 2013-09-23
  • 打赏
  • 举报
回复
Qt的官方例子:Image Composition Example 说的很清除
shy_wing 2013-09-23
  • 打赏
  • 举报
回复
我也有做画板,我用的方法是 1.先弄一个painterPath. 2.在moveEvent中,把每个点lineTo到path中。 3.写paintEvent时,painter->setPen(pen),painter->drawPath(path)即可
Inhibitory 2013-09-18
  • 打赏
  • 举报
回复
如果把荧光笔放在最下层,也可以实现这样的效果。
狂风暴雨 2013-09-18
  • 打赏
  • 举报
回复
void QPainter::setCompositionMode ( CompositionMode mode ) Sets the composition mode to the given mode. Warning: Only a QPainter operating on a QImage fully supports all composition modes. The RasterOp modes are supported for X11 as described in compositionMode().

16,240

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧