Определить, нажата ли мышь за пределами 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;
}

У вас есть следующие варианты:

  1. Подкласс QGroupBox и переопределить mousePressEvent()

  2. Установите фильтр событий на этот групповой блок и перехватите QMouseEvents

  3. Если вы хотите отлавливать только щелчки правой кнопкой мыши (контекстное меню), реализуйте пользовательский обработчик контекстного меню.

Другие вопросы по тегам