それほど複雑ではないと思いますが、この質問を言葉で表現するのに苦労しています。
私は似たようなことをしたいのですが、起動する前に複数回呼び出されQTimer::singleshot()
たとしても、SLOT を 1 回だけ呼び出す必要があります。QTimer::singleshot()
タイマーから一度だけスロットを呼び出したい場合は、次のように見ることができます
QTimer::singleShot(500, this, SLOT(MySlot()));
次に、それが一度だけ発生することを保証します。
明確にするために、既存のタイマーから呼び出すのではなく、これの静的バージョンを呼び出すことで、一度だけ発生します。
これはうまくいくはずです。
class MyObject
{
// ...
QTimer* mTimer;
}
MyObject::MyObject()
{
mTimer = new QTimer(this);
mTimer->setSingleShot(true);
connect(mTimer, SIGNAL(timeout()), SLOT(doStuff()));
}
MyObject::startOrResetTimer()
{
mTimer->start(1000);
}
クイック アンド ダーティ: クラスでブール値を使用し、スロットで true に設定します。ブール値がリセットされるまで、後続の呼び出しを無視します。