c++ - Qt C++ QLine QPoint

标签 c++ qt qt5 qpainter

我有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();

        }
    }
}

最佳答案

你就快到了。您需要使用QPainter::drawLine为此,并传递来自 m_vertices 的两个连续的鼠标 QPoint

例如

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);
  }
}

关于c++ - Qt C++ QLine QPoint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61462006/

相关文章:

c++ - QDateTime::fromMSecsSinceEpoch 的有效范围

c++ - 如何删除 QML 对象

c++ - 检查位还是使用 bool 值?

c++ - 如何创建 Qt 组合框

c++ - 应用程序部署——客户端无音频、无图像

qt - 如何更改 QML 对话框/窗口的 transient 父级?

c++ - QGroupBox 单击/焦点

.net - 在 .NET API 中包装 MFC Doc/View 应用程序的最佳方式?

c++ - Cmake:检查系统是否包含目录

python - 无法在 PyQt5 中导入 QtWebKitWidgets