Есть такой виджет:
Нужно обработать mousePressEvent только если клик произошел по виджету headerWidget, как это можно сделать не перегружая его?
Установите перехватчик событий:
headerWidget->installEventFilter(headerClickHandler);
где headerClickHandler — это переменная-экземпляр класса с временем жизни не меньше чем у headerWidget. Сам же класс-перехватчик должен быть унаследован от QObject и обрабатывать все необходимые события внутри своего eventFilter():
class HeaderClickHandler : public QObject
{
// Q_OBJECT не нужен — мы не работаем с сигналами и слотами
protected:
bool eventFilter(QObject* watched, QEvent* event)
{
// Так как mousePressEvent() — это лишь тонкая обёртка, вызываемая при
// поступлении события QEvent::MouseButtonPress, то мы можем ловить
// событие напрямую
#if __cplusplus >= 201103L
assert(event);
#endif
if(event->type() == QEvent::MouseButtonPress)
{
// Неявно предполагаем, что единственный перехватываемый объект —
// это headerWidget
// ... (производим все необходимые действия)
// Позволяем передать сообщение далее, обработчику headerWidget-а
return false;
}
}
}
Продвижение своими сайтами как стратегия роста и независимости