0

Qtアプリケーションを開発しています。プログラムのある時点で、アプリケーションを一時停止してから関数を開始する必要があります。

QTimer::singleShot(10000, this, SLOT(testFuntion()));
qDebug() << "after Singleshot";

そして、私の問題があります。タイマーが起動し、出力を確認できますがtestFuntion()、アプリケーションは一時停止しません。SingleShot の直後にqDebug出力が表示され、10 秒後に my の出力が表示されますtestFuntion()

この問題を解決するのを手伝ってくれませんか? または、アプリケーションを一定時間一時停止してから関数を実行できる他のコマンドはありますか?

4

3 に答える 3

2

正常に機能しています。この行:

QTimer::singleShot(10000, this, SLOT(testFuntion()));

タイマーが刻むと関数が起動します。ただし、タイマーはアプリケーションの残りの部分とは独立して実行されるため、この行が実行された後、メイン アプリはそのqDebug()行に進みます。

本当にアプリケーションを一時停止したい場合 (アプリが応答しなくなるため、これはお勧めしません)、sleep()andusleep()関数を使用できます。

より良い方法は、ユーザーに何らかの通知 (進行状況バーなど) を表示することです。

于 2013-02-06T08:11:35.170 に答える
0

私は本当に簡単な解決策を見つけました。

まず、タイマーを使用する場合はこのように

QTimer *test = new QTimer();
test->isSingleshot(true);
connect(test, SIGNAL(timeout()), this, SLOT(testFunction()));
test->start(10000)


test->isActive 

仕事中。

ただし、このチェックがtrueになった場合にのみ、アプリケーションで別のタイマーを開始する必要があります。

物事を少しクリアする。特定の値がテキストファイルにあるかどうかを確認します。そこにない場合は、5分後に再試行します。それが彼らの場合、私はタイマーを開始します。ただし、このタイマーは、ファイルから値を取得した場合にのみ機能します。したがって、この値を取得した場合は、1秒タイマーを開始します。MainWindows Construktorでこのタイマーを開始する前に、このタイマーが実行されていない場合は、すべてが正常に機能します。

ユーザーは説明付きのメッセージを受け取り、メインウィンドウを起動しますが、何もハングしません。

ヘルプの挨拶をありがとうクリス

于 2013-02-07T07:56:22.657 に答える
0

QEventLoopを使用できます。sleepアプリケーションが応答しなくなることがないという利点があります。基本的に、ネストされたイベント ループが作成されます。

QEventLoop loop;
QTimer::singleShot(10000, &loop, SLOT(quit()));
loop.exec();
qDebug() << "after Singleshot";
于 2013-02-07T09:57:01.087 に答える