7

それほど複雑ではないと思いますが、この質問を言葉で表現するのに苦労しています。

私は似たようなことをしたいのですが、起動する前に複数回呼び出されQTimer::singleshot()たとしても、SLOT を 1 回だけ呼び出す必要があります。QTimer::singleshot()

4

4 に答える 4

13

タイマーから一度だけスロットを呼び出したい場合は、次のように見ることができます

QTimer::singleShot(500, this, SLOT(MySlot()));

次に、それが一度だけ発生することを保証します。

明確にするために、既存のタイマーから呼び出すのではなく、これの静的バージョンを呼び出すことで、一度だけ発生します。

于 2014-08-22T02:34:24.710 に答える
6

これはうまくいくはずです。 

class MyObject
{

// ...
    QTimer* mTimer;
}

MyObject::MyObject()
{
    mTimer = new QTimer(this);
    mTimer->setSingleShot(true);
    connect(mTimer, SIGNAL(timeout()), SLOT(doStuff()));
}

MyObject::startOrResetTimer()
{
   mTimer->start(1000);
}
于 2013-01-11T01:00:24.883 に答える
-2

クイック アンド ダーティ: クラスでブール値を使用し、スロットで true に設定します。ブール値がリセットされるまで、後続の呼び出しを無視します。

于 2013-01-11T00:55:13.430 に答える