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