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

标签 c++ qt qt4 qwidget qt5

我正在尝试让鼠标按下事件与我创建的小部件一起使用,但每次我单击该小部件时,窗口都会停止响应,我必须终止该程序。有谁知道如何解决这个问题以及如何改变颜色?

这是 .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);
}

.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

最佳答案

您在无限递归中调用 mousePressEvent()。您应该更改行:

iconWidget::mousePressEvent(event);

在您的 mousePressEvent 函数中:

QWidget::mousePressEvent(event);

关于c++ - QWidget 在鼠标按下事件后不响应。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14468008/

相关文章:

c++ - 默认情况下是否应该有任何功能能够就地工作

c++ - 更正 Visual C++ __FILE__ 宏的大小写

qt - Qt slots可以当普通方法使用吗?

windows - 隐藏终端上打印的所有 QT 应用程序警告?

qt - QTimer超时后还会继续计数吗?

C++简单程序错误

c++ - IntelliJ-CLion : What should I do to use input text file?

c++ - 在用它执行算术时隐式地将对象转换为浮点类型

c++ - 停止 Qt QGraphicsView 在调整大小时滚动

qt4 - QSerialDevice : Compilation error "libudev.h: No such file or directory"