2012-03-21 17 views
2

QtでQEventの進行を遅らせる方法はありますか?コードの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); 
    } 
} 

ありがとう!

+0

これで動作しないのは何ですか? –

+1

この方法を使用できますが、新しいイベントを作成する必要があります。 QCoreApplication :: postEvent/sendEventを使用して処理することができます。 –

+0

@LucaCarlon 'timer()'関数が呼び出されるまでに退避したQEvent *オブジェクトは破棄されたため、これは機能しません。 – Chris

答えて

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をキャッチしようとしているようです。その場合は、MyQWidgetvoid QWidget::keyPressEvent(QKeyEvent* event)より優先させるのが簡単な方法です。

関連する問題