Как превратить линию в кривую с помощью мыши в Qt? - PullRequest
0 голосов
/ 14 июня 2011

У меня проблемы с моим проектом. Я пытаюсь нарисовать в области визуализации курс для автомобилей (улиц), который может содержать как прямые линии, так и кривые. Для этого я думал о том, чтобы в первую очередь нарисовать линии, а затем с помощью мыши выбрать одну линию и преобразовать ее в кривую, перемещая мышь (кривую, которая имеет точку взгляда на линии, выбранной мышью). До сих пор мне удавалось рисовать только точки в области рендеринга и автоматически генерировать линии между этими точками, но я не уверен, как с помощью мыши преобразовать линию в кривую.

Мой код до сих пор:

renderarea.cpp:

<code>
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(temp);
}
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);
}

Надеюсь, ты сможешь мне помочь. Заранее спасибо.

1 Ответ

0 голосов
/ 14 июня 2011

Есть некоторый пользовательский интерфейс (щелчок правой кнопкой мыши?), Который меняет сегмент линии на кривую Безье. Затем управляйте формой кривой, перетаскивая маркеры (которые вам нужно будет предоставить). Еще один щелчок правой кнопкой изменяет кривую обратно на сегмент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...