带有QPoint的Qt c ++ QPainter QVector

问题描述 投票:1回答:1

我的[[drawingwidget.h

中有QVector<QPoint> m_vertices;class DrawingWidget: public QWidget { Q_OBJECT public: DrawingWidget(MainWindow *parent = 0); ~DrawingWidget(); QVector<QPoint> m_vertices;
我试图在

mainwindow上实现添加/删除顶点。我设法制作了add函数,现在删除它们应该很容易,但是我有点困惑。

主要思想是,我有一个弹出菜单,可以在其中选择“工具”。我可以添加顶点,删除顶点,移动顶点,添加线,删除线。这个想法是,例如,当我选择“添加顶点”时,“ m_state”将更改为“ ADD_VERTEX_SELECTED”,因此我只能添加顶点,不能添加其他任何东西。

enum DrawingWidgetState { NO_TOOL_SELECTED, ADD_VERTEX_SELECTED, MOVE_VERTEX_SELECTED, DELETE_VERTEX_SELECTED, ADD_LINE_SELECTED, DELETE_LINE_SELECTED };

绘图

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

MousePress事件。左键单击时,我必须删除单击的顶点

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 == DELETE_VERTEX_SELECTED) { if(event->button() == Qt::LeftButton) { m_vertices.clear(); } } }

我该怎么做?
c++ qt qpainter
1个回答
0
投票
此代码将std::find_if与lambda表达式一起使用以找到最接近的点。您可能想允许比实际的圆半径更大的回旋余地,但这取决于您。
© www.soinside.com 2019 - 2024. All rights reserved.