2016-10-28 10 views
1

Qt Webソケットを使用しています。ので、(応答ため待つよりも、私はこの2つのメソッドを持っていると私はサーバーにメッセージを送信したいQt websocket次のメソッドに進む前に、メッセージを送信して応答を待ちます。

例えば:

は、私は、この通信を作ることができる方法を知っているか、お聞きしたかったですそれは私がそれを使用することができる方法を知っているシグナルとスロットを使用して...しかし、いけない可能性がありmyMethod()

client->sendMessageToServer(); 
myMethod(data); 

確かproccessよりdata変数)とを更新しますここでは、以下を参照してください。

を、私はそれがサーバー

私が何よりも放出しなければならない
void Client::sendMessageToServer(QString &str){ 

    m_wSocket.sendTextMessage(str); 
} 

にメッセージを送信します[OK] sendMessageToServer()を行くとき?私はどのように待っている状態になるのか分かりません... QWebSocketにそのようなスロットはありません、それはすぐに方法myMethodに行く。 データが設定されている場合は、ここで行っておりません。

connect(&m_wSocket, &QWebSocket::textMessageReceived, this, &Client::onTextMessageReceived); 

void Client::onTextMessageReceived(QString message) 
{ 
    setData(message);  
} 

あなたが任意のアイデアを持っていますか: をところで、私はそれがメッセージをrecievesとき、それはこのためのonTextMessageRecievedに行き、次のように設定クライアントを持っていますか?

+0

あなたは 'textMessageReceived'のようなシグナルを意味しますか?彼らに電話したいあなたの方法を接続してください。そして、このためのハンドラであなたの 'myMethod'と呼んでください。 – Hayt

+0

また、 'setData'でカスタム信号を出して、この信号を' myMethod'と接続することもできます。 – Hayt

+0

問題は、onMessageRecievedに届きません。setData ... 2つのメソッドsendMessageToserverとmymethod、myMethodそのデータは実現されていません。 –

答えて

2

setDataまたはonTextMessageReceivedで信号を送信し、これに接続できます。他のクラスの

void Client::setData(QString message) 
{ 
    //... whatever you do in setData 

    emit dataChanged();  
} 

あなたが

connect(client, &Client::dataChanged,this,&<...>::myMethod); 

を行うことができ、その後ちょうど

client->sendMessageToServer(); 
//without the myMethod call 

を呼び出したときにsetDatamyMethodも自動的に呼び出されますと呼ばれます。

Qtはほとんどの場合「待っている」わけではありません。イベント駆動型です。イベントを定義する(または既存のイベントを使用する)と、このイベントが発生したときに何をするかをプログラムに指示します。

"通常の"プログラミングと比べて少し珍しいですが、あなたはそれに慣れています。

FIRSTそれは(MyMethodはを処理し)、それは遅すぎたonMessageRecievedに達しより:

+0

でもありがとう、助けてくれた –

0

まあ真実は、それがこのように働いています。私がやったことは、mymethod()をスロットに挿入して削除したことです。私はメッセージが来るたびにそれを発しました。

関連する問題