Событие (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(..)
, так далее.).