QtにGuiスレッドとQTcpSocketスレッドを作りました.QTcpSocketスレッドからGuiスレッドにデータアクセスしたいのですがどうすれば解決しますか
グローバル変数を宣言する必要がありますか?
2 に答える
QTcpSocket は gui スレッドから作成されます。
その時点で、GUI スレッドはソケット オブジェクトへのポインタを持っています。
次に、GUI のスロットとソケットの信号の間の接続を作成します。
ソケットオブジェクトでは、データを取得するたびに、データを含むシグナルを送信するだけで、GUI スレッドによって取得されます。
QString、QByteArray (または raw ポインター) などの任意の Qt 型を、シグナル/スロットを介して非常に効率的に渡すことができます。詳細 if スレッド間のシグナルも自動的に処理されます。
最も簡単な方法は、シグナルスロット接続を介して通信することです。各スレッドには 1 つの QObject があります。送信オブジェクトにはシグナルがあり、それは他のスレッドの受信オブジェクトのスロットに接続されています。
このセットアップでは、接続の両端にあるオブジェクトが正しいスレッドに存在するように構成されていることを確認します。に電話する必要がある場合がありますQObject::moveToThread()
。QObject には、現在のスレッドを取得できるプロパティもあります (この場合はデバッグ目的で)。
次に、通常どおりシグナルスロット接続を確立します。両方のオブジェクトが異なるスレッドにあるため、シグナルがトリガーされると、スロット呼び出しイベントが受信フラグのイベント ループに配置されます。これは Qt のドキュメントで説明されていますQt::QueuedConnection
。