event(QEvent *)与mousePressEvent(QMouseEvent *)冲突?

时间:2012-09-30 05:38:08

标签: qt button qevent mousepress

在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:

};

1 个答案:

答案 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(..)等)分发。