Qt桌面白板工具其一(解决曲线不平滑的问题——贝塞尔曲线)
前言:
有关Qt的绘画、白板、画板等应用,前前后后研究过好几次,每一次都有新的收获和体会。而这次终于研究明白,如何解决因为电脑配置应用卡顿所导致的线条折线明显、存在卡顿的问题。是的,网上说的都是贝塞尔曲线,但研究半天没有很明确地解决我的需求,所以这里我也结合了自己的思考,给出以下的解决方法和代码吧。
一、核心实现代码
我们首先要在mousePressEvent和mouseMoveEvent里面收集我们的鼠标点击移动点,或者触摸屏的移动点。
void BezierTestWidget::mousePressEvent(QMouseEvent *event)
{
if(flag_bezier)
{
bezier_points.clear();
bezier_points.append(event->pos());
}
}
void BezierTestWidget::mouseMoveEvent(QMouseEvent *event)
{
if((event->buttons() & Qt::LeftButton))//是否左击
{
QImage image = last_image;
if(flag_bezier)
{
//采集点的时候,适当过滤一下比较接近的一些点,不然会影响平滑处理的效果
if(qAbs(bezier_points.last().x()-event->pos().x())>15 || qAbs(bezier_points.last().y()-event->pos().y())>15)
{
bezier_points.append(event->pos());
}
QPainter painter(&image);
painter.setRenderHint(QPainter::Antialiasing, true);
QPen pen;
QColor brush_color(0,255,0,100);
pen.setBrush(brush_color);
pen.setWidth(5);
painter.setPen(pen);
drawBezier(&painter, &image);
painter.end();
}
*draw_image = image;
repaint();