2013-01-22 38 views
3

我試圖讓鼠標按下事件與我創建的小部件一起工作,但每次單擊小部件時,窗口都會停止響應,我必須殺死該程序。有誰知道如何解決這個問題,以及如何讓顏色改變?QWidget在鼠標按下事件後沒有響應。

這裏是.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 

回答

9

你叫mousePressEvent()在一個無限遞歸。您應該更改行:

iconWidget::mousePressEvent(event); 

mousePressEvent功能:

QWidget::mousePressEvent(event); 
+0

說,就擔任停止凍結的窗口,但窗口小部件的顏色仍然不會改變。任何想法爲什麼? – zachstarnes

+0

您需要在使用之前設置筆刷顏色。目前這是退出paintEvent()之前你做的最後一件事。您的更改將無效。 –

+0

謝謝我真的很感激它。 – zachstarnes