开发者

How to transform a line into a curve with the mouse in Qt?

开发者 https://www.devze.com 2023-03-13 08:46 出处:网络
I am having trouble with a project of mine. I am trying to draw in an render-area a course for the cars (a street) which can contain both straight lines and curves. For that I was thinking of primaril

I am having trouble with a project of mine. I am trying to draw in an render-area a course for the cars (a street) which can contain both straight lines and curves. For that I was thinking of primarily drawing the lines and then with the mouse selecting one line and transforming it into a curve by moving the mouse (a curve which has as peek the point on the line selected by the mouse). Until now I only managed to draw points in the render area and automatically generate lines between these points, but I am not sure about how to transform the line into a curve with the mouse.

My code until now is:

renderarea.cpp:


RenderArea::RenderArea(QWidget *parent)
    : QWidget(parent)
{
    setBackgroundRole(QPalette::Base);
    setAutoFillBackground(true);
}
void RenderArea::mousePressEvent(QMouseEvent *e)
{
    point = e->pos();
    updateList(point);
    this->update();
}
void RenderArea::updateList(const QPoint& p)
{
    Point point;
    point.point = p;
    list.append(point);
    if (list.count()>1)
        lineAdded(point);
}
void RenderArea::lineAdded(const Point &p)
{
    Line temp;
    temp.endPoint = p;
    temp.startPoint = list.at(list.count() - 2);
    lines.append(t开发者_如何学Pythonemp);
}
void RenderArea::paintEvent(QPaintEvent * /* event */)
{
    int i;
    QPainter painter(this);
    painter.setPen(QPen(Qt::black,2));
    for (i = 0; i < list.size(); ++i)
        painter.drawPoint(list[i].point);
    for (i = 0; i < lines.size(); ++i)
        painter.drawLine(lines[i].startPoint.point, lines[i].endPoint.point);
}

Hope you can help me. Thanks in advance.


Have some UI (right click?) that changes the line segment to Besier curve. Then control the shape of the curve by dragging handles (which you will need to provide). Another right click changes the curve back to segment.

0

精彩评论

暂无评论...
验证码 换一张
取 消