У меня есть QVector m_vertices и QVector m_lines в моем DrawingWidget.h
Я сейчас пытаюсь сделать простой инструмент для рисования, где я могу манипулировать с вершинами и линиями. Мне удалось нарисовать несколько вершин в моем «MainWindow», теперь я пытаюсь реализовать линию между двумя вершинами
Основная идея заключается в том, что у меня есть всплывающее меню, где я могу выбрать «инструмент» , Я могу добавить вершину, удалить вершину, переместить вершину, добавить строку, удалить строку. Идея в том, что когда я выбираю, например, «Добавить вершину», то «m_state» изменится на «Добавление», поэтому я могу добавлять только вершины. Когда я выбираю «Добавить линию», например, то «m_state» снова изменится, так что я могу выбрать только две созданные вершины, что приведет к линии между ними.
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);
}
for(int i = 0; i < m_vertices.size()-1 ; i++)
{
const QPoint& point1 = m_vertices[i];
const QPoint& point2 = m_vertices[i+1];
painter.drawLine(point1, point2);
}
}
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) {
for(int i = 0; i < m_vertices.size()-1 ; i++) {
const auto &point1 = m_vertices[i];
const auto &point2 = m_vertices[i+1];
}
}
}
}
Может ли кто-нибудь объяснить мне, почему это происходит и что я должен сделать, чтобы улучшить мой код? Если что-то требует объяснения, я скажу.