Событие (QEvent*) конфликтует с mousePressEvent(QMouseEvent *)?

В 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 ответ

Решение

Все события, полученные виджетом, проходят через 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(..), так далее.).

Другие вопросы по тегам