Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: kilanoff от Февраль 12, 2011, 14:28



Название: Рисование карандашом (без разрывов в линии)
Отправлено: kilanoff от Февраль 12, 2011, 14:28
Есть такая проблема, есть виджет на котором рисую мышкой, как карандашом. есть одна проблема, не получается сделать рисование не разрывной линией, т.е. получается вот так:

http://pic2net.ru/view/?v=29341a414b16ffc4b27228b8b7572aa7.jpg

а надо вот так:

http://pic2net.ru/view/?v=c31df2b3339c7ef0e84777059b7af9b5.jpg

как такое можно реализовать ? именно как рисование карандашом как в фотошопе или паинте сделать ? без разрывов


Название: Re: Рисование карандашом (без разрывов в линии)
Отправлено: BRE от Февраль 12, 2011, 14:57
как такое можно реализовать ? именно как рисование карандашом как в фотошопе или паинте сделать ? без разрывов
Самому достраивать линии между этими точками.


Название: Re: Рисование карандашом (без разрывов в линии)
Отправлено: kilanoff от Февраль 13, 2011, 14:37
спасибо, получилось
Код:
bool MyScreenShot::eventFilter(QObject *obj, QEvent *event)
{
    QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event);

    if (event->type()==QEvent::MouseButtonPress)
    {
        start_paint = true;

        curX = startX = mouseEvent->pos().x();
        curY = startY = mouseEvent->pos().y();
    }

    if (event->type()==QEvent::MouseButtonRelease && start_paint)
    {
        start_paint = false;

        endX = mouseEvent->pos().x();
        endY = mouseEvent->pos().y();
    }

    if (event->type()==QEvent::MouseMove && start_paint)
    {
        endX = mouseEvent->pos().x();
        endY = mouseEvent->pos().y();

        QPainter p1( &theImage );
        p1.setPen(QPen(Qt::black, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin));
        p1.setBrush(Qt::yellow);
        p1.drawLine(curX,curY,endX,endY);
        p1.end();

        update();
        repaint();

        curX = mouseEvent->pos().x();
        curY = mouseEvent->pos().y();
    }

    return false;
}