Как понимаю, поскольку виджет фигуры находится в 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);
}