Нужно, чтобы при клике на фигуру она выделялась синим, когда снова кликаешь на неё она становится обратно чёрной. При этом, если нажать на область вне фигуры она тоже должна стать чёрной, если была выделена.
Как понимаю, поскольку виджет фигуры находится в centWidget, то нужно написать два mousePressEvent. Один для фигуры, другой для она, в котором она находится. Так я и сделал, но оно не работает. Причём перестаёт работать, когда добавляется event в centWidget. Ниже код хедеров от фигуры и centWidget. Потом реализации event ов.
#include <QtWidgets/QWidget>
#include "figure1.h"
#include "figure2.h"
class CentWidget : public QWidget
{
Q_OBJECT
public:
int flag1 = 0;
int flag2 = 0;
CentWidget(QWidget *parent = nullptr);
private:
QVector<Figure1*> figures1;
QVector<Figure2*> figures2;
QTimer* timer_for_add;
protected:
void mouseMoveEvent(QMouseEvent* event);
void mousePressEvent(QMouseEvent* event);
public slots:
void add();
void del();
void figure1Chosen();
void figure2Chosen();
};
#endif // CENTRALWDIGET_H
#ifndef FIGURE1_H
#define FIGURE1_H
#include <QtWidgets/QWidget>
class Figure1 : public QWidget
{
Q_OBJECT
public:
explicit Figure1(QWidget *parent = nullptr);
void Diselect();
void Select();
bool isSelect();
protected:
void paintEvent(QPaintEvent* event);
void mousePressEvent(QMouseEvent* event);
void contextMenuEvent(QContextMenuEvent *event);
private:
bool Selected = false;
};
#endif // FIGURE1_H
void Figure1::mousePressEvent(QMouseEvent * event)
{
if (Selected){
Selected = false;
}else{
Selected = true;
}
repaint();
QWidget::mousePressEvent(event);
}
void CentWidget::mousePressEvent(QMouseEvent* event){
for (auto k:figures1){
k->Diselect();
k->repaint();
}
QWidget::mousePressEvent(event);
}