2

我有一个带有几个按钮的对话框。当我禁用对话框并单击子按钮时,什么也没有发生。但是一旦我再次启用对话框,按钮的鼠标事件就会被处理。

禁用对话框是否只是延迟处理其子小部件的任何鼠标事件,直到再次启用?

我尝试在禁用对话框时为子小部件安装事件过滤器,然后在再次启用时删除事件过滤器。但它提供了相同的行为。一旦启用对话框,即删除子小部件的事件过滤器,就会处理鼠标事件(禁用时)。

有人可以帮忙这里有什么问题吗?

void MyDialog::changeEvent(QEvent *e)
{
    if(e->type() == QEvent::EnabledChange)
    {
        if(isEnabled())
        {
            qDebug("Filters removed!\n");
            ui->pbtnOption1->removeEventFilter(this);
            ui->pbtnOption2->removeEventFilter(this);
            ui->pbtnOption3->removeEventFilter(this);
        }
        else
        {
            qDebug("Filters installed\n");
            ui->pbtnOption1->installEventFilter(this);
            ui->pbtnOption2->installEventFilter(this);
            ui->pbtnOption3->installEventFilter(this);
        }
    }
}

bool MyDialog::eventFilter(QObject *obj, QEvent *e)
{
    if(obj == ui->pbtnOption1 || obj == ui->pbtnOption2 || obj == ui->pbtnOption3)
    {
        if(e->type() == QEvent::MouseButtonPress)
        {
            qDebug("MousePress Event!\n");
            return true;
        }
        else
            return false;
    }
    return QDialog::eventFilter(obj, e);
}
4

0 回答 0