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

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

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

有点半透明的感觉,但颜色是一深一浅的,如果画得慢的话是实心的,请高手指点一下怎么
解决
...全文
646 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().
内容概要:本文围绕超导磁能储存系统(SMES)的建模与仿真展开,基于Simulink平台构建系统级动态仿真模型,涵盖超导线圈、功率转换系统(PCS)以及核心控制策略等关键模块。研究重点在于分析SMES在电网中实现快速能量存储与释放的能力,验证其在提升电力系统稳定性、抑制功率波动方面的有效性,尤其针对新能源发电带来的间歇性与波动性问题提供了有效的解决方案。通过仿真手段深入探讨系统的动态响应特性,为优化控制算法的设计与应用提供可靠的技术支撑。; 适合人群:适用于具备电力系统、自动控制理论或能源存储技术背景,熟悉Simulink仿真环境的科研人员、工程技术人员及研究生;同时适合有志于开展新型储能技术仿真研究的高年级本科生参考学习。; 使用场景及目标:①深入理解超导磁能储存系统的基本结构、工作原理及其在电力系统中的应用场景;②掌握在Simulink中搭建复杂电力电子与控制系统联合仿真模型的方法;③研究SMES在电网调频、电压支撑、瞬时功率补偿等典型工况下的动态性能表现;④为后续先进控制策略(如PID、模糊控制、现代控制理论等)的优化设计与验证提供仿真试验平台。; 阅读建议:建议读者结合文中模型逐步动手搭建仿真系统,重点关注各功能模块的参数设置与信号接口匹配,配合具体案例进行仿真调试,深入理解控制逻辑与系统动态行为之间的内在联系,并可进一步拓展至与其他储能形式(如锂电池、飞轮储能)的性能对比研究,以深化对不同类型储能技术特点的认知。
内容概要:本文围绕“考虑火-储联合调频(火电机组-混合储能)的协同控制策略”展开研究,提出一种基于Matlab仿真的协同控制方法,旨在提升电力系统频率调节的快速性与稳定性。通过构建火电机组与混合储能(如蓄电池、飞轮等)的联合调频模型,设计合理的功率分配机制与控制策略,充分发挥火电的持续调节能力与储能的快速响应优势,有效应对电网负荷波动与频率偏差。文中结合改进信号分解算法(如ICEEMDAN)与优化算法(如GWO),实现对调频信号的精准分频与储能单元的优化调度,提高系统整体调频效率与经济性。; 适合人群:具备一定电力系统基础知识和Matlab编程能力,从事新能源并网、电力系统稳定控制、储能技术应用等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于研究火电机组与混合储能在电网一次调频、二次调频中的协同作用机制;②为实际电力系统中储能配置与调频控制策略设计提供仿真验证平台与理论支持;③支撑相关课题研究、学术论文撰写及工程项目前期论证。; 阅读建议:建议结合Matlab代码深入理解控制算法实现细节,重点关注功率分配逻辑、信号分解过程与优化算法参数设置,并可通过修改系统参数进行对比仿真,以加深对协同控制效果的认识。

21,498

社区成员

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

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