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

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: [1]
1  Qt / Вопросы новичков / MousePressEvent : Октябрь 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);
}
2  Qt / Вопросы новичков / Re: Две залипающие кнопки из тулбара : Сентябрь 29, 2021, 22:07
Проблему решил. Чтобы такое сделать нужно использовать QActionGroup
3  Qt / Вопросы новичков / Две залипающие кнопки из тулбара : Сентябрь 29, 2021, 19:26
Подскажите, у меня есть две залипающие кнопки QAction в тулбаре, я хочу, чтобы когда одна активировалась, то другая( в зависимости от нажатости ) либо выключалась, либо ничего не делала, (т.е кнопки не могут быть нажаты одновременно). Я не могу понять как прописать кнопкам кастомные слоты, у меня ведь только экземпляры их классов, а доступа к заголовочному файлу нет.
4  Qt / 2D и 3D графика / Re: Не отрисовывается графика внутри дочернего элемента : Сентябрь 26, 2021, 20:42
void CentWidget::add(){
    figures = new Figure1(this);
    figures->show();
}
Большое вам спасибо!
5  Qt / 2D и 3D графика / Не отрисовывается графика внутри дочернего элемента : Сентябрь 26, 2021, 13:21
Задача такая: есть кнопка add она должна создавать виджет на centralwidget, внутри которого должнена при помощи qpainter рисоваться фигура. У меня почему-то это не работает. Мой код во вложении.
Страниц: [1]

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