在QT中:我使用从QToolButton继承的类和重写事件(QEvent *),现在我想添加'mousePressEvent',但它永远不会被命中,事件(QEvent *)是否与mousePressEvent(QMouseEvent *)冲突?谢谢。
bool IconLabel::event (QEvent* e ) {
if ( e->type() == QEvent::Paint) {
return QToolButton::event(e);
}
return true;
}
void IconLabel::mousePressEvent(QMouseEvent* e)
{
int a = 1;//example
a = 2;// example//Handle the event
}
课程是:
class IconLabel : public QToolButton
{
Q_OBJECT
public:
explicit IconLabel(QWidget *parent = 0);
bool event (QEvent* e );
void mousePressEvent(QMouseEvent* e);
signals:
public slots:
};
答案 0 :(得分:2)
窗口小部件接收的所有事件都会通过event(..)
,然后重定向到相应的事件处理程序方法。如果您只是想添加鼠标按事件处理,那么您错误的是不转发除paint事件之外的任何事件:
bool IconLabel::event (QEvent* e ) {
if ( e->type() == QEvent::Paint ||
e->type() == QEvent::QEvent::MouseButtonPress ) {
return QToolButton::event(e);
}
return true;
}
事件处理程序方法也应该在protected
中,因为事件只应该通过事件队列(QCoreApplication::postEvent(..)
等)分发。