問題タブ [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.
c++ - Qtプログレスバーが必要以上に増加する
だから私が欲しいのは、タイマーでプログレスバーをインクリメントすることです。しかし、どういうわけか、プログレスバーが必要以上に増加します。
メインウィンドウ.h:
メインウィンドウ.cpp:
デバッガーで、プログレスバーの値が 6 であるのに対し、カウンターの値は 4 しかないことに気付きました。また、最初に 1、次に 2、次に 2、次に 1 というようにインクリメントします。私は何を間違っていますか?!
編集:プログレスバーだと思います。アクションを次のように変更しました。
コメントアウトしたので、タイマーは開始されません。アクションボタンをクリックすると、常にプログレスバーが1、2、2、1の順にインクリメントされます。同じ動作です。だからタイマーじゃない!
qt - QTimerで表示が更新されませんか?
QTimer がいつ起動するかに基づいてテキストを表示しようとしています...
qt - Qt でポップアップの期間表示を制限する
20 秒しか続かないポップアップが欲しいです。QTimerを使用すると思いますが、残り秒数を示す動的メッセージを設定することは可能ですか?
qt - 関数 QTimer::singleShot の問題
QAudioInput で音声を録音しようとしています。このウェブサイトQAudioInputのドキュメントによると。しかし、実行すると、空の生ファイルがエクスポートされました。確認したところ、関数 QTimer::singleShot が機能していないようです (ステートメントを追加qWarning << "Done"
しvoid stopRecording()
、「完了」が表示されなかったので、 QTimer::singleShot 関数に何か間違いがあると思いました)。
これは、関数 QTimer::singleShot をチェックするために使用される私のコードです
そして、このコードも機能しません。誰でも説明できますか?私は Qt プログラミングの初心者です。
c++ - Qtimer を使用して 1 秒の遅延を追加する方法
私は現在、次のような方法を持っています
このメソッドは、実際にはシグナルに接続されたスロットです。Qtimer を使用して 1 秒の遅延を追加したいと思いますが、これを達成する方法がわかりません。タイマーは終了時にシグナルをトリガーするため、シグナルはパラメーターを取り込まない別のメソッドにアタッチする必要があります。このタスクを達成する方法について何か提案はありますか?
更新: シグナルは 1 秒間に複数回呼び出され、遅延は 1 秒間になります。ここでの問題は、タイマーの timeout() シグナルに接続されたスロットにパラメーターを渡すことです。私の最後のアプローチは、クラスのメンバー変数に値を格納し、ミューテックスを使用して、変数が使用されている間に変更されないようにすることです.しかし、私はここでより単純な方法を探しています.
c++ - ブロッキング while ループを使用した qt スレッド ワーカーの設計
qt5とopencvを使用して、qtを使用してユーザーインターフェイスを提供し、opencvで画像処理部分を実行するアプリケーションを作成します.....
これまでのところ、私のデザインは次のとおりです。
- qtメインGUIスレッドを使用して、ビデオとボタンやチェックボックスなどの標準コントロールを表示しています
- 画像をキャプチャして処理するために、QObject から派生したワーカー クラスを作成し、それをスレッドに移動しました。
- ワーカー クラス (Worker::process) で実行される関数にはブロッキング while ループがあります。
- ビデオまたはカメラからフレームをキャプチャします
- それにいくつかの処理を行います
- cv::Mat から QImage に変換します
- QImageを表示するためにメインスレッドに信号を送信します
- また、ユーザー入力を受け取るために、メインスレッドからワーカースロットへの信号の送信を使用していました
私が直面した問題は、イベント ループが while ループをブロックしているため、メイン スレッドからのシグナルがワーカーによって取り出されないことでした。
多くの検索の後、メインスレッドからの信号をワーカースロットに接続するときに Qt::DirectConnection 引数を使用するソリューションを思いつきました。当時の問題を解決したものです。
ここで、ブロッキング while ループ内に qtimer または qbasictimer を追加する必要があります...そして、タイマー スロット (qtimer の場合) と保護された timerEvent ハンドラー (qbasictimer の場合) が呼び出されることはありません。私の予感は、ループのブロッキングが原因であるということです
フォーラムで多くの検索と読み取りを行った後、何らかの形で全体的な設計が間違っている可能性があるという結論に達しました..そして、アプリケーションに機能を追加し続けると、これらの問題が表示され続けます.
現在、次の 2 つのオプションがあります。
何らかの方法でスレッドの exec() 関数をブロッキング while ループ内で呼び出します。専門家への質問は次のとおりです。「worker QObject クラス内で thread::exec() メソッドを呼び出すにはどうすればよいですか。exec() を呼び出すには、worker を実行しているスレッドへの参照が必要です」(短期的な解決策)
実装全体を変更します.....そしてここでの質問は次のとおりです:「私のオプションは何ですか.....」(長期)
私の言い回しや英語が何らかの形で問題を不明確にした場合は、お気軽に詳細をお尋ねください.....ありがとう...
c++ - 別のメソッドで起動すると QTimer がクラッシュする
私は自分の娯楽のためにニューロンの基本機能をシミュレートするプログラムを作成しようとしてきましたが、一定期間にわたって整数を減らす必要があるため、QTimer を使用することにしました。
私の問題は、私のプログラムがメソッド「changeVoltage」に到達し、タイマーを開始する行に到達すると、プログラムが即座にクラッシュすることです。
プログラムが開始されると、ボルトの値は -40 で、「励起」ボタンを押すと、値 10 で changeVoltage をトリガーすることにより、電圧が 10 増加して -30 になります。 50 は、もはやベースラインではありません (この場合、タイマーが終了し、電圧が減少します) が、 -40 よりも高く、タイマーを開始する必要があります (タイマーがゆっくりと電圧を 1 ずつ減少させます)。しかし、タイマーがその行に到達すると、プログラム全体がクラッシュするため、タイマーは開始していないようです。
このファイルは次のようになります。
これを何時間もデバッグして試してみましたが、QTimerが起動しない理由がわかりません。接続後、回線外で起動できない?私が達成しようとしていることを達成する他の方法はありますか?
qt - Qt: QTimer が実際に起動したのはいつですか?
アプリケーションが呼び出さQTimer::start()
れると、すぐに開始されますか、それとも現在のイベントが処理された後に開始されますか? timeout()
つまり、スロット内で長時間処理する場合は、時間補正付きの単発タイマーを使用する必要がありますか?