Qt C ++ QLine QPoint - PullRequest
       59

Qt C ++ QLine QPoint

2 голосов
/ 27 апреля 2020

У меня есть QVector<QPoint> m_vertices и QVector<QLine> в моем drawingWidget.h

В настоящее время я пытаюсь создать простой инструмент для рисования, куда я могу добавить вершины и линии. Мне удалось нарисовать несколько вершин на моем "MainWindow", но я не могу понять, как я могу реализовать линию между созданными вершинами.

По сути, у меня есть две созданные точки и нажатием левой мыши кнопка на первой вершине и левая кнопка мыши на второй вершине ... она должна создать линию между ними.

Как я могу это сделать?

void DrawingWidget::paintEvent(QPaintEvent *event) {
    QPainter painter(this);
    painter.fillRect(event->rect(), Qt::blue);
    painter.setBrush(Qt::black);
    for(int i = 0; i < m_vertices.size() ; i++) {
        painter.drawEllipse(m_vertices[i], 20, 20);
    }
}
void DrawingWidget::mousePressEvent(QMouseEvent *event) {
    if(m_state == ADD_VERTEX_SELECTED) {
        if(event->button() == Qt::LeftButton) {
            //m_x = event->x();
            //m_y = event->y();
            //update();
            QPoint point = event->pos();
            m_vertices.append(point);
            update();
        }
    }
    if(m_state == ADD_LINE_SELECTED) {
        if(event->button() == Qt::LeftButton) {
            QPoint Startpoint = event->x();
            QPoint Endpoint = event->y();

        }
    }
}

1 Ответ

3 голосов
/ 27 апреля 2020

Вы почти у цели. Для этого вам нужно использовать QPainter::drawLine и передать две последовательные мыши QPoint s из m_vertices.

Например

void DrawingWidget::paintEvent(QPaintEvent *event)
{
  QPainter painter(this);
  painter.fillRect(event->rect(), Qt::blue);

  painter.setPen(QPen(Qt::black, 3)); // width of the line

  if(m_vertices.size() == 1) // for the first mouse click
    painter.drawEllipse(m_vertices[0], 4, 4);

  for(int i = 0; i < m_vertices.size()-1 ; i++)
  {
      const QPoint& point1 = m_vertices[i];
      const QPoint& point2 = m_vertices[i+1];
      // draw the mouse point
      painter.drawEllipse(point1, 4, 4);
      painter.drawEllipse(point2, 4, 4);
      // draw the line
      painter.drawLine(point1, point2);
  }
}
...