の画像を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. Angular/Ionicで頻繁に変化する画像データをバインドする方法は?
- 4. Javascript - 頻繁に更新されるファイルから読む
- 5. サーバから関数を頻繁に呼び出す方法は?
- 6. mongodbでインデックスを頻繁に更新するコレクションの効率性
- 7. Tomcatアプリケーションの頻繁な更新
- 8. JavaFX TableViewの頻繁な更新
- 9. GUIの頻繁な更新WxPYTHON
- 10. gpsの場所を頻繁に更新するには?
- 11. reducexストアのダメージアプリのパフォーマンスを頻繁に更新する
- 12. 頻繁に変化するNSArrayからUItableViewデータをリフレッシュ
- 13. ほとんどのMySQLで頻繁に更新されるテーブル
- 14. 頻繁に変更されるデータを処理するソリューション
- 15. カサンドラで頻繁に更新されるテーブル
- 16. Python - 頻繁に更新されるリモートログファイルからの読み取り
- 17. cassandraの頻繁に更新されるフィールドのインデックス方法
- 18. 画像(OpenCVの&C++)内で最も頻繁に発生する色を決定
- 19. ASP MVC 3 - 最初のページビューに画像が表示されませんが、頻繁に更新されます
- 20. カサンドラスキーマ - テーブルを考えると、頻繁に更新された列
- 21. 頻繁に更新されるNuGetパッケージを扱う
- 22. 列の索引が頻繁に更新される
- 23. QLabel内の画像のサイズを変更するには
- 24. Lucene.netと頻繁に更新されるフィールド
- 25. バックグラウンドが頻繁に更新される遅延UI
- 26. 元の画像データを更新する
- 27. 頻繁に更新Djangoのモデルの提出1
- 28. iOSのコアデータデータベースで頻繁な更新とリクエストに対処するベストプラクティス?
- 29. pyqt4 qlabelの背景画像
- 30. ストアテーブルビュー内のURLから頻繁に読み込みを避けるためのキャッシュに画像
ユーザーはGUIを使用できるはずですから、ソケットにソケットを挿入しました。私の場合、ユーザーが何らかのボタンを押すと、いくつかのコマンドがサーバーに送られます。私は他のソケット接続を使用してコマンドを送信します。だからこそ私は画像受信機ソケットをスレッドに入れ、プログラムとのユーザーのやりとりを妨げてはいけません。 –
私は 'あなたがそれを同期させるのであれば、なぜ別のスレッドが必要なのでしょうか?'と言っていましたが、とにかく、最初の解決策はいい考えです。 –