Russian Qt Forum
Ноябрь 22, 2024, 16:06 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: MousePressEvent  (Прочитано 1163 раз)
Nikita23548
Новичок

Offline Offline

Сообщений: 5


Просмотр профиля
« : Октябрь 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);
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 23.