C++ QWidget在鼠标按下事件后不响应。

C++ QWidget在鼠标按下事件后不响应。,c++,qt,qt4,qwidget,qt5,C++,Qt,Qt4,Qwidget,Qt5,我试图让一个鼠标按下事件与我创建的小部件一起工作,但每次我单击小部件时,窗口都停止响应,我必须终止程序。有人知道如何解决这个问题,以及如何改变颜色吗 下面是.h和.cpp文件 .cpp文件: #include "iconwidget.h" #include <QPaintEvent> #include <QPainter> #include <QPainterPath> iconWidget::iconWidget(QWidget *parent) :

我试图让一个鼠标按下事件与我创建的小部件一起工作,但每次我单击小部件时,窗口都停止响应,我必须终止程序。有人知道如何解决这个问题,以及如何改变颜色吗

下面是.h和.cpp文件

.cpp文件:

#include "iconwidget.h"
#include <QPaintEvent>
#include <QPainter>
#include <QPainterPath>

iconWidget::iconWidget(QWidget *parent) :
    QWidget(parent)
{
    this->resize(ICON_WIDGET_WIDTH,ICON_WIDGET_HEIGHT);
    pressed = false;
}

void iconWidget::paintEvent(QPaintEvent *event)
{
    QRect areatopaint = event->rect();
    QPainter painter(this);
    QBrush brush(Qt::black);
    QPointF center = this->rect().center();
    QPainterPath icon;
    icon.addEllipse(center,20,20);
    painter.drawPath(icon);
    painter.fillPath(icon, brush);

    if (pressed) {
        brush.setColor(Qt::red);
    }
}

void iconWidget::mousePressEvent(QMouseEvent *event)
{
    pressed = true;
    update();
    iconWidget::mousePressEvent(event);
}
#包括“iconwidget.h”
#包括
#包括
#包括
iconWidget::iconWidget(QWidget*父项):
QWidget(父级)
{
此->调整大小(图标\小部件\宽度、图标\小部件\高度);
按下=假;
}
void iconWidget::paintEvent(QPaintEvent*event)
{
QRect areatopaint=event->rect();
油漆工(本);
QBrush刷(Qt::黑色);
QPointF center=this->rect().center();
QPainterPath图标;
图标。加法器(中心,20,20);
绘制路径(图标);
painter.fillPath(图标、画笔);
如果(按下){
笔刷。设置颜色(Qt::红色);
}
}
void iconWidget::MousePresseEvent(QMouseEvent*事件)
{
按下=真;
更新();
iconWidget::mousePressEvent(事件);
}
.h文件:

#define ICONWIDGET_H

#include <QWidget>

#define ICON_WIDGET_WIDTH 45
#define ICON_WIDGET_HEIGHT 45

class iconWidget : public QWidget
{
    Q_OBJECT

public:
    explicit iconWidget(QWidget *parent = 0);
    void paintEvent(QPaintEvent *event);
    bool pressed;

protected:
    void mousePressEvent(QMouseEvent *event);
};

#endif // ICONWIDGET_H
#定义ICONWIDGET\u H
#包括
#定义图标\u小部件\u宽度45
#定义图标\u小部件\u高度45
类iconWidget:公共QWidget
{
Q_对象
公众:
显式iconWidget(QWidget*parent=0);
无效油漆事件(QPaintEvent*事件);
布尔压榨;
受保护的:
作废鼠标压力事件(QMouseEvent*事件);
};
#endif//ICONWIDGET\u H

您以无休止的递归方式调用
mousePressEvent()
。您应该更改行:

iconWidget::mousePressEvent(event);
mousePressEvent
函数中:

QWidget::mousePressEvent(event);

这就可以阻止窗口冻结,但小部件的颜色仍然不会改变。知道为什么吗?你需要在使用之前设置笔刷的颜色。目前,这是您在退出paintEvent()之前所做的最后一件事。您的更改将无效。