私はQt C++プログラムを持っています。私はメインドライバMainWindow
とTCPClient
クラスを持っています。 TCPClient
クラスは、リモートサーバーとの通信、TCPを介したデータの送信、データの処理の要求、およびサーバーから処理されたデータの受信に使用されます。私のTCPClient
クラスでは、私はQAbstractSocket
シグナルdisconnected
を使用しています。これは、サーバーとの接続が切断されたときに発生します。このdisconnect
信号(ifDisconnected
)を扱う関数(スロット)では、MainWindow
のonCompletionCallback
関数が呼び出されます。今私の質問は、上記のonCompletionCallback
の実行が終了した後に、実行の送信をTCPClient
に戻す方法をどうやって防ぐのかです。以下は、問題を説明するコードが不完全な場合です。Qt信号が出力されたときに最後に実行された関数に実行制御を送信しないようにするにはどうすればよいですか?
mainwindow.cpp
void MainWindow::on_connectButton_clicked()
{
std::function<void(void)> callback std::bind(&MainWindow::onCompletetionCallback, this);
tcpClient_ = new TCPClient(callback)->connectToServer(someData);
}
void MainWindow::onCompletetionCallback()
{
if(tcpClient_->isRequestSuccess())
{
QJsonDocument responseJson = tcpClient_->getResponse();
return; //When this finishes executing, I want to prevent the execution control to go back to TCPClient
}
}
TCPClient.cpp
void TCPClient::connectToServer(QJsonDocument requestJson)
{
// Removed code of other connect signals
connect(tcpSocket_, &QTcpSocket::disconnected, this, &TCPClient::ifDisconnected);
}
void TCPClient::ifDisconnected()
{
// Here the callback is called. After the callback finishes executing, I don't want execution to return to `TCPClient`.
onCompletionCallback_();
return;
}
どのように私はこの問題を解決するのです。 QAbstractSocket
は、接続が利用可能かどうかをチェックするためのユーティリティ機能を提供していないので、信号disconnected
を使用する必要があります。