1

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

};
4

1 回答 1

2

小部件接收到的所有事件都通过event(..),然后被重定向到适当的事件处理程序方法。您犯了一个错误,即不转发除绘制事件之外的任何事件,如果您只想添加鼠标按下事件处理,请执行以下操作:

bool IconLabel::event (QEvent* e ) {
    if ( e->type() == QEvent::Paint ||
         e->type() == QEvent::QEvent::MouseButtonPress ) {
        return QToolButton::event(e);
    }
    return true;
}

事件处理程序方法也应该在 中protected,因为事件只应该通过事件队列(QCoreApplication::postEvent(..)等)分发。

于 2012-09-30T07:02:59.813 回答