Определить, нажата ли мышь за пределами GroupBox
Я ищу событие, если щелкнуть мышью за пределами groupBox в Qt. Я попытался FocusOutEvent, но не смог получить событие:
ui.groupBox->installEventFilter(this);
void myClass::focusOutEvent(QFocusEvent *event) { ui.groupBox->hide(); }
Любая помощь будет принята с благодарностью!
2 ответа
Проблема заключается в том, что события отслеживаемого объекта не пересылаются в собственные обработчики событий объекта фильтра, такие как focusOutEvent
, но к специальной функции виртуального события, т.е. eventFilter(QObject *obj, QEvent *event)
как указано в installEventFilter
, Итак, ваш обработчик событий должен выглядеть так:
bool myClass::eventFilter(QObject *obj, QEvent *event)
{
if (obj == ui.groupBox && event->type () == QEvent::FocusOut)
ui.groupBox->hide();
return false;
}
У вас есть следующие варианты:
Подкласс
QGroupBox
и переопределитьmousePressEvent()
Установите фильтр событий на этот групповой блок и перехватите QMouseEvents
Если вы хотите отлавливать только щелчки правой кнопкой мыши (контекстное меню), реализуйте пользовательский обработчик контекстного меню.