我的[[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(); } } }
我该怎么做?
std::find_if
与lambda表达式一起使用以找到最接近的点。您可能想允许比实际的圆半径更大的回旋余地,但这取决于您。