Нажатие кнопки QPush в QWidget вызовет focusOutEvent, как это игнорировать?

В моем коде, когда focusOutEvent слот звонков, этот виджет будет закрыт. Я наткнулся на проблему, которая QPushbutton в этом текущем виджете также вызовет focusOutEvent и кнопка clicked() сигнал никогда не может быть запущен больше.

В функции конструктора:

connect(btn, SIGNAL(clicked()), this, SLOT(btnClickFucntion()));

тогда у меня есть функция, подобная следующей:

void AWidget::mouseReleaseEvent(QMouseEvent *event)
{
    Q_UNUSED(event);
    this->close();
}

void AWidget::focusOutEvent(QFocusEvent *event)
{
    if (!this->isHidden())
    {
        event->accept();
        this->close();
    }
    else
        event->ignore();
}

void AWidget::btnClickFucntion()
{
    //Do something
}


Тем не мение, btnClickFucntion{} никогда не звонил.

1 ответ

bool AWidget::isFocusChange2BtnInside()
{
    QPushButton *btn = dynamic_cast<QPushButton *>(this->focusWidget());
    if (btn == this->btn)
        return true;
    else
        return false;
}


Я добавляю эту функцию в качестве условия (если true, возвращаю; иначе делаю следующий шаг) перед вызовом close() функционировать и исправить это.
Извините, что беспокою.

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