Time for action – receiving text messages
In the constructor, we have connected the socket's readyRead()
signal to a local slot. So, whenever the server sends a message through QTcpSocket::write()
, we read the data and display it in the chat window:
m_receivedData.append(m_socket->readAll()); if (!m_receivedData.contains(QChar(23))) return; QStringList messages = m_receivedData.split(QChar(23)); m_receivedData = messages.takeLast(); foreach (const QString &message, messages) { ui->chat->insertPlainText(message + "\n"); }
As you already know, QTcpSocket
inherits QIODevice
, so we use QIODevice::readAll()
to get the entire text that was sent. Next, we store the received data and determine whether the message was transmitted completely. This approach is the same as we used previously for the server. Lastly, in the for
loop, we add the messages to the chat window.