問題タブ [qtimer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
380 参照

c++ - Qt -> Gui -> Thread -> Qtimer から値を設定

次の画像を取得するためにできるだけ頻繁に呼び出す必要がある特別なカメラ クラスがあります。GUI 自体には、カメラ パラメーターと画像出力の設定を変更するためのスライダーがいくつか含まれています。

これが私のクラスの簡単な構造です:

私のメインウィンドウには以下が含まれます:

私のカメラ スレッドには以下が含まれます。

そして、私のカメラ ワーカーには以下が含まれます。

問題は、Signal -> Slot -> Signal -> Slot -> camera.setValue を呼び出してカメラに 1 つの値を取得する必要があることですが、値が 20 あります。これを行うより良い方法はありますか?

0 投票する
1 に答える
1235 参照

c++ - 仮住所取得?

QT の Push Mode と QTimerEvent を使用して timerEvent を実装しようとしています。私のコードは、「一時アドレスを取得しています」というエラーを返します。なにが問題ですか?どんな助けでも大歓迎です。ここにコードがあります

0 投票する
0 に答える
240 参照

qt - QTimer を使用して QTGLWidget を修正し、レンダリング時間を短縮するにはどうすればよいですか?

現在、プログラムに QtOpenGL を使用しています。私のプログラムは、3D 空間にドットをプロットします。これらのドットは、1 から数千の間の任意の数である可能性があります。各ドットを表す球を描画するために、関数「glusphere」を使用しています。これで各フレームが作成され、QTimer を使用して各フレームをアニメーションとして表示する必要があります。このアニメーションは fps で制御する必要があります。たとえば、fps=30 の場合、QTimer の setInterval(t) に t=1000/30 を設定します。fps を 0 に設定して問題を探し、setInterval(0) を使用してレンダリングにかかる​​時間を観察しました。結果は次のとおりです。

n = 球の数

n=10の場合:28ms⇒約30ms

n=100の場合:87ms⇒約90ms

n=150の場合:137ms⇒約140ms

n=1000の場合: 598ms => 約600ms => 0.6秒

上記の結果から、各フレームのレンダリング時間は、球の数に比例して増加します。以下は私のコードの一部です:

明確にするために:

  • 各フレームのレンダリング時間は、球の数によって異なります。
  • 球の数によってレンダリング時間が変わるべきではありません
  • 1000 個の球体を描画しても、0.5 秒かかります
  • 問題はglusphereの使用にあると思いますか?
  • 球を描画する別の方法があれば、100 fps 以上で描画することは可能でしょうか?

この遅いレンダリングを引き起こしているボトルネックがどこにあるのか、誰か説明してもらえますか?

0 投票する
1 に答える
2313 参照

c++ - QTimer::singleShot でこれを削除します

私のqtサーバーアプリケーションでリクエストを処理するとき、「リソース」が解放されるのを待たなければならないことがあります。私の理解では、スロット実装でスリープするとメッセージループが停止するため、これはおそらく期待どおりに機能しません。

QTimer を singleShot などで使用することを考えました。私の調査によると、タイマーの信号を介してパラメーターを渡すことはできません。

私の次のアプローチは、リクエストごとに新しいオブジェクトのインスタンスを作成し、このリクエストにパラメータを設定し、このオブジェクトをタイマー シグナルの受信者として使用することです。このスロットでは、リクエスト オブジェクトへの参照を保存していない (保存したくない) ため、リクエスト オブジェクトを削除する必要があります。

リクエストオブジェクトを解放するためのより良いアプローチ、または私の問題に対するより良いアプローチはありますか? delete this;そうでない場合:このコンテキストでの使用は有効ですか?

0 投票する
2 に答える
3153 参照

c++ - QTimerがスレッドで起動しない

私は 2 つのスレッドを持つ Qt5 c++ アプリを持っています。メイン プログラムの起動時にスレッド A が開始されます。スレッド A の start メソッドが正常に実行されます。

ここまでは順調ですね。次に、メイン プログラムでスレッド A にシグナルを送信して QTimer を開始しますが、QTimer はそれを実行しますが、タイマーが期限切れになることはありません。

スレッド B は tcp 接続を処理します。アプリへの telnet 接続を開始すると、スレッド B が起動し、突然、スレッド A からの Qtimer が通常の間隔で期限切れになるのが見えます。

スレッド B が開始するまで、スレッド A の QTimer が期限切れにならないのはなぜですか?

スレッドがめちゃくちゃになっていると思います。製品の下のコードの最後のセクションに注意してください。

これは、ワーカー オブジェクト (これ) がタイマー オブジェクトとは別のスレッドにあることを示唆しています。このタイマー スレッド アドレスは、実際には MAIN スレッドです。なんで?よくわかりません。

提案?


私のメインアプリでは、次のようにスレッドを作成して開始します。

私のメインアプリでは、新しいスレッドにシグナルを送信します:

私のスレッド(TheControllerオブジェクト)でスロットを実行します:

0 投票する
0 に答える
72 参照

c++ - いくつかの QTimer が最小間隔のみを使用するのはなぜですか?

何日も悩まされている奇妙な問題があります。インターネット調査などもあまり役に立ちませんでした。私は現在、4 つの長方形が正方形のパスに沿って異なる速度で移動することになっている単純なアプリケーションに取り組んでいます。私が何をしても、すべての長方形がまったく同じ速度で移動していることを除いて、すべてが正常に機能しています。

長方形を定義するクラスRectClassがあります。zeichenFeldは、4 つの四角形 (RectClass の 4 つのインスタンス) を作成する親ウィジェットです。すべての長方形には、特定の座標、色、および現在の状態が保存されるファイルがありますが、それは私の問題の一部ではありません。

私のコードの重要な部分は次のとおりです。

zeichenFeld.cpp

RectClass.h

RectClass.cpp

zeichenFeld ::startが呼び出されると、4 つのタイマーはすべて、選択した最小の間隔 (この例では 10) を常に使用し、設定した他の間隔は完全に無視します。なぜこれが起こっているのか手がかりさえありませんが、私はまだQtにかなり慣れていないので、皆さんが私を助けてくれることを願っています!
ところで: 私は多くのコードを省略しました。英語は私の母国語ではありません。

前もって感謝します。

0 投票する
1 に答える
476 参照

macos - OS X でのシングルショット QTimer の急速な発火が複数回あり、早すぎる

一度に複数のアプリケーションで開くことができるリソース (クラス) インスタンスにアイドル タイマーを実装しました。したがって、idleTimer単純なだけQTimerでなく、スロット (トリガー) は、過去 N 分間に他のアプリケーションが同じリソースにアクセスしていないかどうかを確認する必要があります。その場合、タイマーは (lastAccessedTime値を更新せずに) リセットされます。それ以外の場合、リソースは閉じられます。したがって、タイマーはシングルショットでありlastAccessTime、QSharedMemory オブジェクトに保持されます。

トレース出力は次のとおりです。

原則は機能しますが、次の 2 つのことに気付きます。

  • タイマーは少し早く起動します。もちろん、これによりタイマーがリセットされます。
  • 素早く連続して数回発射します。初期の発砲がそれをリセットするはずであるという事実は、わずかな影響もありません.

以下は、各リソース アクセスでタイマーをリセットする関数と、タイマーのトリガー スロットを含む、私のコードの関連部分です。

私が間違っていることは何か分かりますか?シングルショットモードに(再)設定して(新たに)開始する前に、タイマーを停止します。オブジェクトとアプリケーションの識別子は、複数回トリガーされるのは実際には同じタイマーであり、タイマー オブジェクトを削除した後でもトリガーされる可能性があることを示しています。

トリガー スロットがアプリケーション (またはインスタンス) 固有ではなくidleTimer、このタイマーのインスタンスを設定するさまざまなアプリケーション全体で、他のすべてのインスタンスからトリガー信号を受信する 1 つのインスタンスにつながる可能性がありますか? idleTimerクラス デストラクタでのみ NULL に設定されるか、timeOut<=0 の場合にのみ設定されるため、トリガー スロットが NULL タイマー オブジェクトで呼び出される可能性があります。

タイマー インストール関数 ( 、 ashandleIdleTimingのメンバーはそれ自体) から:KWallet::WalletidleTimer

タイマー トリガー スロット:

0 投票する
1 に答える
874 参照

pyqt - 別の QThread に移動したにもかかわらず、pyqt コードがブロックされている

いくつかのブロッキング コードを別の QThread に移動することで、PyQt4 プログラムの応答性を高めようとしました。うまくいかなかったので、デモンストレーションとしてこの最小限の例を作成しました。

このコードの問題は、sleep-command がまだユーザー インターフェイスをブロックしていることです。Sleeper クラスの外部で QTimer を作成、接続、実行すると期待どおりに動作することがわかりましたが、その理由はわかりません。

0 投票する
1 に答える
140 参照

c++ - 3Dポイントである一連の位置からセンサーがカバーする合計距離を計算する方法は?

Qt GUI を使用してセンサーの動きを追跡しています。mainwindow.cpp ファイルは次のとおりです。

ATC3DG.h は、センサーのヘッダー ファイルです。record.x、record.y、record.z は、センサーの x、y、および z 位置の 3D 位置をインチで示します。基本的に私がやっていることは、開始ボタンをクリックするとセンサーがオンになり、QTimer がタイムアウト中に発行された信号で開始し、showvalues()関数が実行を開始することです。この関数は、センサーの位置をQt GUI のラベルに表示します。このループ中、ポイントはセンサーのすべての位置値で満たされます。

停止ボタンはタイマーを停止し、ポイントベクトルに含まれるすべてのポイントを使用して距離を計算します。これは以下を使用して行われます。

合計は私に完全に奇妙な値を与えています。たとえば、センサーが約 5 ~ 6 インチしか移動していない場合、100 などの範囲の値を示しています。

私の mainwindow.h ファイルは次のとおりです。