QT开发中文网

c++ qt 实现橡皮擦功能可以擦掉笔刷绘制的图像

在C++ Qt中,可以通过设置QPainter的CompositionMode来实现橡皮擦功能。具体来说,我们可以将绘制模式设置为QPainter::CompositionMode_Clear,然后使用指定大小和形状的笔刷在画布上绘制,就能够清除指定区域的图像。

下面是一个简单的示例代码:

void DrawingWidget::erase(QPoint pos, int size)
{
    QPainter painter(&image);
    painter.setCompositionMode(QPainter::CompositionMode_Clear);

    QBrush brush(Qt::black, Qt::SolidPattern);
    painter.setBrush(brush);

    QRect rect(pos.x() - size/2, pos.y() - size/2, size, size);
    painter.drawRect(rect);

    update();
}

在这个示例中,我们定义了一个名为erase()的函数,用于擦除画布上指定位置和大小的图像。首先,我们创建了一个QPainter对象,并将其绘制模式设置为CompositionMode_Clear。接着,我们创建了一个黑色填充、样式为实线的QBrush对象,并将其设置为当前画刷。最后,使用drawRect()函数绘制指定大小和位置的矩形,在画布上进行清除操作。

在使用该函数时,您只需要传入鼠标点击或移动事件捕获到的位置信息以及需要擦除区域的大小即可。例如,在mouseMoveEvent()函数中调用erase()函数可以这样写:

void DrawingWidget::mouseMoveEvent(QMouseEvent *event)
{
    if ((event->buttons() & Qt::LeftButton) && isDrawing) {
        if (event->modifiers() & Qt::ControlModifier) {
            erase(event->pos(), 20);
        } else {
            QPainter painter(&image);
            QPen pen(Qt::black, 10, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
            painter.setCompositionMode(QPainter::CompositionMode_Source);
            painter.setPen(pen);

            QPoint currentPos = event->pos();
            painter.drawLine(lastPoint, currentPos);

            lastPoint = currentPos;
            update();
        }
    }
}

在这个示例中,我们首先判断是否按下了Ctrl键。如果是,则调用erase()函数进行橡皮擦操作;否则,使用QPainter类实现笔刷功能并绘制线条。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://qt.0voice.com/?id=1848

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?