3

QtでQEventの進行を遅らせる方法はありますか?

このコードは、私がやりたいことを示しているだけです。

QList<QEvent*> waited_events;

...

bool MyQWidget::event(QEvent * event)
{
    if (event->type() == QEvent::KeyPress)
    {
        waited_events.append(event);
        QTimer::singleShot(100, this, SLOT(timer()));  
        return true;
    } else
    return QWidget::event(event);
}

...

void MyQWidget::timer()
{
    if (!waited_actions.isEmpty())
    {
        QEvent* event = waited_events.takeFirst();
        QWidget::event(event);
    }
}

ありがとう!

4

1 に答える 1

0

原則として、QWidgetsによってトリガーされるQEventsは保存しないでください。

QEventの処理を遅らせたい場合は、投稿したコードスニペットが正しいです。ただし、次の場合、コードスニペットは希望どおりに機能しません。

void MyQWidget::timer()
{
    if (!waited_actions.isEmpty())
    {
        QEvent* event = waited_events.takeFirst();
        QWidget::event(event);
    }
}

QEventはすでに削除されているため、waited_events常に空になります。

このアプローチを使用する必要がある場合MyQWidgetは、新しいイベントを作成する必要があります(F. Osterfeldが提案したように)。100%確信はありませんが、あなたはただキャッチしようとしているようですQEvent::KeyPress。その場合、簡単な方法はをMyQWidgetオーバーライドすることvoid QWidget::keyPressEvent(QKeyEvent* event)です。

于 2012-03-23T20:40:25.650 に答える