QT5のQTimerは間違えやすい、正しい使い方
実際には、遅延やタイミングを計るための関数があることが多く、C++やCでは、関数をカスタマイズすることができます。また,Sleep (number)という関数もあり,numberは何msの遅延が必要かを表します.
ここでは、QT5のタイマクラスであるQTimerを紹介します。 タイマクラスであるQTimerは、タイマが作動したときに信号を発射するタイマを提供し、一般的には次のような形式でプログラムされます。
QTimer *timer = new QTimer(this);
timer->start(2000); //this statement doesn't just run once, it keeps running, so a judgment statement is needed to end it
connect(timer, SIGNAL(timeout()), this, SLOT(myTimeout1()));
最初の文は、thisポインタが指す現在のインターフェイスにタイマーを定義しています。つまり、タイマーポインタの親ウィンドウはthisポインタが指すウィンドウインターフェイスです。
2番目の文は、タイマーの計時を開始すると、2000msの間、計時されることを意味し、次の2つの文とも等価である。
timer->setInterval(2000);
timer->start();
同じことをするのです。
3番目の文は、明らかに、2000msが経過すると、関数timeout()シグナルが発せられ、クエリによって次のように動作することを意味します。
void QTimer::timeout()
このシグナルは、タイマーがタイムアウトしたときに発せられます。
このtimeout()関数は、スロット関数timerDone()に関連付けられ、スロット関数を実行します。
ここからがキモ!3回言うことが重要です。3回言うことが重要です! 3回言うことが重要です!
2行目のコードに注目してください。
timer->start( 2000 ); // 2 seconds to trigger the timer
この行は、2000ミリ秒ごとにタイマーを再起動させ、stop()が呼ばれてタイマーがオフにならない限り、再びスロット関数を呼び出しています。例えば次のようになります。
QTimer *timer = new QTimer();
timer->setInterval(100);//run the connect() function every 5 seconds after the time runs out.
timer->start(); //this statement doesn't just run once, it keeps running, so it needs a judgment statement to end
connect(timer, SIGNAL(timeout()), this, SLOT(myTimeout1()));
if(number>118)
{
number=0;
timer->stop();
}
ここではグローバル変数の番号が定義されており、118回タイマーを動作させ、119回目以降はタイミング機能を使用しないようにすることが目的です。
void :myTimeout1()
{
number++;
QString str1;
// set the variable to a global variable, an array
if(number<110)
{
str1=QString("%1").arg(data1[number][0]);
ui->tableWidget_3->setItem(0,0,new QTableWidgetItem(str1));
}
}
data1[ ][ ] はグローバル配列として定義されています。
以上、タイマーの個人的なまとめです、あまりうまく書けないことをお許しください、質問があればコメントを残してください。
関連
-
Build Record 2-CSS file not loaded-Solved-Resource interpreted as Stylesheet but transferred with MIME type text/plain
-
null のプロパティ 'style' を読み取ることができない 問題
-
ante react Warning index.js:1 Warning: findDOMNode is deprecated in StrictMode.findDOMNode は StrictMode では非推奨です。
-
Android Studioアップデート後の警告 アプリがGoogle検索でインデックスされない
-
java lang ClassCastException java util ArrayList cannot be able to be.
-
ssh エラーの解決: シェルリクエストはチャンネル 0 で失敗しました。
-
S_ISREG S_ISDIR およびその他いくつかの共通マクロ
-
Pythonの一般的なエラーとデバッグ方法 (2)
-
STM32でのビットバンド動作
-
mscorlib.dll で "TargetInvocationException" 型の例外が発生するが、ユーザーコードで処理されない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Webプロジェクトの実行ポップアップ Java Exceptionが発生しました。
-
C#のTask.Delay()とThread.Sleep()
-
cenos upgrade g++ gcc(cc1plus: error: unrecognized command line option "-std=c++11")
-
問題 free(): 無効な次のサイズ (fast): 0x0000000001475e70 ***
-
ArrayAdapter は、リソース ID が TextView である必要があります。
-
vue startup error throw er; // 処理されない 'エラー' イベント
-
エラーです。未解決のコンパイル問題の解決
-
ValueErrorの解決に成功:解凍するための値が足りない(期待値2、取得値1)
-
ポインタと整数の比較
-
ASP.NET MVCでsessionIDの解が変わり続ける。