3

作成したウィジェットでマウスプレスイベントを機能させようとしていますが、ウィジェットをクリックするたびにウィンドウが応答しなくなり、プログラムを強制終了する必要があります。誰かがこれを修正する方法と色を変更する方法を知っていますか?

これが.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
4

1 に答える 1

9

mousePressEvent()あなたは無限の再帰を呼びます。次の行を変更する必要があります。

iconWidget::mousePressEvent(event);

あなたのmousePressEvent関数で:

QWidget::mousePressEvent(event);
于 2013-01-22T21:18:03.047 に答える