Более простое решение (если применимо) - установить WA_TransparentForMouseEvents
в зависимости от вашего условия перехода.
Например, если вы хотите щелкнуть по определенным регионам Child-A, вы можете использовать его mouseMoveEvent()
, чтобы проверить, нужно ли устанавливать или не устанавливать WA_TransparentForMouseEvents
. Затем события клика проходят автоматически.
Если вы не можете определить, следует ли принимать событие щелчка до его фактического запуска, вы можете сделать что-то вроде этого:
void ChildA::mousePressEvent(QMouseEvent* event) {
const bool accepted = ...; //insert custom logic here
if (accepted) {
... //handle event here
} else {
//not accepting event -> resend a copy of this event...
QMouseEvent* eventCopy = new QMouseEvent(*event);
QApplication::instance()->postEvent(eventCopy);
//...but this time, ignore it
setAttribute(Qt::WA_TransparentForMouseEvents, true);
QTimer::singleSlot(1, this, SLOT(resetClickTransparency()));
//don't propagate original event any further
event->accept();
}
}
void ChildA::resetClickTransparency() { //slot
setAttribute(Qt::WA_TransparentForMouseEvents, false);
}
Отказ от ответственности: Все это записано наизусть после года бездействия Qt, поэтому, пожалуйста, исправьте меня в именах или ошибках типа.