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