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
說,就擔任停止凍結的窗口,但窗口小部件的顏色仍然不會改變。任何想法爲什麼? – zachstarnes
您需要在使用之前設置筆刷顏色。目前這是退出paintEvent()之前你做的最後一件事。您的更改將無效。 –
謝謝我真的很感激它。 – zachstarnes