单击QWidget中的QPushbutton会导致focusOutEvent,如何忽略它?

时间:2018-07-27 07:43:00

标签: qwidget qpushbutton slot focusout

在我的代码中,当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 个答案:

答案 0 :(得分:0)

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


在调用close()函数之前,我将此函数作为条件添加(如果为true,则返回;否则继续下一步)。并修复它。
抱歉打扰了。