Когда мне нужно вызывать базовый класс в методах событий в QT?

#c #qt #events

Вопрос:

У меня есть свой класс Widget. Его базовый класс-QWidget. Я хотел бы, чтобы в моем классе widget были такие методы событий , как keyPressEvent(QKeyEvent *event) paintEvent(QPaintEvent *event) или mousePressEvent(QMouseEvent *event) .

Я не знаю, когда мне нужно вызывать базовый класс, а когда мне не нужно вызывать базовый класс в этих методах. Когда я должен сделать:

 void myWidget::mousePressEvent(QMouseEvent *event)
{
   ...
   QWidget::mousePressEvent(event); // <----- this line
}
 

?

Здесь: https://doc.qt.io/qt-5/qwidget.html#keyPressEvent существует информация, которая может быть важна, когда у нас есть всплывающие виджеты в приложении. Но это только причина для вызова базового класса? У меня в приложении нет всплывающих виджетов, поэтому я могу вызвать базовый класс, но мне это не нужно?

Здесь: https://doc.qt.io/qt-5/qwidget.html#paintEvent там нет никакой информации о различиях между базовым классом вызова и не вызова. Итак, в paintEvent не имеет значения, звоню я или не звоню в базовый класс?

Ответ №1:

Это будет зависеть от того, реализует ли базовый класс какую-либо логику в этих методах, например, если вы переопределите метод keyPressEvent QLineEdit и не вызовете QLineEdit::keyPressEvent(event) его, вы не получите поведение по умолчанию, аналогичное для paintEvent из других виджетов.

В заключение, вы должны вызвать базовый метод, если хотите, чтобы поведение по умолчанию продолжалось.