Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Nikita23548 от Октябрь 03, 2021, 13:57



Название: MousePressEvent
Отправлено: Nikita23548 от Октябрь 03, 2021, 13:57
Нужно, чтобы при клике на фигуру она выделялась синим, когда снова кликаешь на неё она становится обратно чёрной. При этом, если нажать на область вне фигуры она тоже должна стать чёрной, если была выделена.
Как понимаю, поскольку виджет фигуры находится в 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);
}