の画像をQLabel
に表示するプログラムを作成中です。イメージはサーバーから送信されます。まず、サーバーからの接続とデータの受信を担当するスレッドがあります。データが受信されると、ソケットスレッドは、 updateImage(Imagedata)
スロットに接続された信号gotNewData(Imagedata)
を送信します。 updateImage(Imagedata)
スロットでは、サーバーから取得した画像データをQImage
に変換し、QPixmap
を作成してQLabel
に設定します。私の問題は、処理中にupdateImage(Imagedata)
機能は、ソケットは、新しい画像で他のパッケージを取得し、QWidget
に何度も何度も送信することです。以前のシグナル呼び出しによって呼び出された関数updateImage(Imagedata)
が既に終了しているかどうかは、ソケットスレッドが気にしないので論理的です。私の質問です:いくつかのテクニックは、どのようにQWidget
updateImage(Imagedata)
機能と私のソケットスレッドを同期させることができますか?QLabelをサーバからの画像データで頻繁に更新する
答えて
ありがとうございます。問題は、古いものがまだ処理されている間に新しい画像が受信された場合に達成したいことです。新しいものをスキップして最後まで処理したい場合は、オブジェクトを送信する際にblockSignalsを呼び出すことをおすすめします。これは呼び出し側と呼び出し側の文字列を破棄しますが、qtはシグナルを受信するのをブロックすることはできません。 ラベルを含むウィジェットでプロキシQObjectを作成した後、moveToThread()を使ってネットワーキングスレッドに移動し、onにblockSignalsを使用することで、パフォーマンスに多大な影響を与えず、他のコミュニケーションネットワークと混同しないようにする変更このオブジェクト。当然のことながら、このオブジェクトは、送信される実際の信号と同じ署名の信号を必要とします。作成されたオブジェクトは、スレッドアフィニティが異なるが、論理的にはGUIウィジェットによって所有されたままであり、それによって削除されるべきである。
もう1つの方法は、オブジェクトにブール変数processing
を作成し、データを処理する場合はtrueに設定します。 falseに戻す直前に、QCoreApplication::processEvents();
と呼びます。これは、イベントキュー内のすべてのイベントを処理します。あなたのスロットでは、processing
vaiableが設定されているかどうかをチェックし、そうであれば何もしないでください。シンプルで粗末なソウルティションですが、うまくいきます。あなたのGUIスレッドでprocessEvents();
(例えばそれ以上のラベルのような)を呼び出す他のイベントハンドラがある場合、ラベルの中にはデータの取得を止める(フリーズする)かもしれないことに注意してください。
Qt::BlockingQueuedConnection
を使用すると、処理が完了する前にネットワーキングスレッドが何かを受け取るのをブロックすることができますが、それはさまざまな理由から悪い考えです(それを同期すると、別のスレッドが必要になります)。
- 1. androidでImageViewを頻繁に更新
- 2. 頻繁に更新されるgridview
- 3. サーバから関数を頻繁に呼び出す方法は?
- 4. Tomcatアプリケーションの頻繁な更新
- 5. JavaFX TableViewの頻繁な更新
- 6. gpsの場所を頻繁に更新するには?
- 7. 頻繁に変化するNSArrayからUItableViewデータをリフレッシュ
- 8. ほとんどのMySQLで頻繁に更新されるテーブル
- 9. 列の索引が頻繁に更新される
- 10. ASP MVC 3 - 最初のページビューに画像が表示されませんが、頻繁に更新されます
- 11. QLabel内の画像のサイズを変更するには
- 12. バックグラウンドが頻繁に更新される遅延UI
- 13. Lucene.netと頻繁に更新されるフィールド
- 14. 頻繁に更新Djangoのモデルの提出1
- 15. iOSのコアデータデータベースで頻繁な更新とリクエストに対処するベストプラクティス?
- 16. pyqt4 qlabelの背景画像
- 17. 頻繁な更新 - 効率性/拡張性の懸念
- 18. 頻繁に更新されるライブアプリ(winforms/clickonce)に対処する方法
- 19. Application_Endが頻繁
- 20. Javaで頻繁にスクリーンショットを撮る
- 21. Oracleはクエリプランをどのくらい頻繁に変更しますか?
- 22. solaris環境でサーバ上の設定ファイルを管理し、複数のユーザが頻繁に変更する
- 23. サーバでSolr例外が頻繁に発生するorg.mortbay.jetty.EofException java.net.SocketException:壊れたパイプ
- 24. WebSocket頻繁にメッセージをゼロコピーする
- 25. アンドロイドからPHPサーバに画像をアップロード
- 26. サーバからアンドロイドアプリに画像を送信
- 27. CollectionViewSourceを頻繁に更新することは可能ですか?奇妙な問題が発生する
- 28. 別のサーバから画像のサイズを変更し、私のウェブサイト
- 29. ユーザーが頻繁にログアウト(デフォルトメンバーシッププロバイダ)
- 30. PHPで頻繁に使用されるデータのみをキャッシュする
ユーザーはGUIを使用できるはずですから、ソケットにソケットを挿入しました。私の場合、ユーザーが何らかのボタンを押すと、いくつかのコマンドがサーバーに送られます。私は他のソケット接続を使用してコマンドを送信します。だからこそ私は画像受信機ソケットをスレッドに入れ、プログラムとのユーザーのやりとりを妨げてはいけません。 –
私は 'あなたがそれを同期させるのであれば、なぜ別のスレッドが必要なのでしょうか?'と言っていましたが、とにかく、最初の解決策はいい考えです。 –