1
我需要在收到消息時更新聊天窗口的內容。以下是我使用的兩個功能:Qt QTcpSocket在讀取數據時不發送信號
void LinPop::_createChat(Client *socket)
{
ChatDialog *chat = new ChatDialog();
chat->setAttribute(Qt::WA_DeleteOnClose);
qDebug() << "Connecting chat : ";
qDebug() << connect(chat, SIGNAL(toSend(QString&)), socket, SLOT(send(QString&)));
qDebug() << connect(socket, SIGNAL(gotTexted(QString)), chat, SLOT(updateChat(QString)));
chat->exec();
}
這是插槽有東西要讀取時調用的插槽。它工作正常,除了沒有發出信號或連接的插槽未被調用。
void Client::readyRead()
{
if (this->_socket->bytesAvailable() > 0)
{
QByteArray data = this->_socket->readAll();
QString text(data);
emit gotTexted(text);
qDebug() << "ReadyRead [" << text << "] [" << this->_socket->bytesAvailable() << "]";
}
}
控制檯輸出:
Connecting chat :
true
true
Sent [ "Test" ]
ReadyRead [ "Test" ] [ 0 ]
現在,如果我這樣做,它進入一個無限循環,但突然的信號/插槽事情的作品就好了,我的文本被髮送到聊天窗口,顯示:
void Client::readyRead()
{
if (this->_socket->bytesAvailable() > 0)
{
QByteArray data = this->_socket->readAll();
QString text(data);
this->_socket->write(data); // Added this
emit gotTexted(text);
qDebug() << "ReadyRead [" << text << "] [" << this->_socket->bytesAvailable() << "]";
}
}
控制檯輸出:
Connecting chat :
true
true
Sent [ "Test" ]
ReadyRead [ "Test" ] [ 0 ]
Update Chat [ "Test" ]
ReadyRead [ "Test" ] [ 0 ]
// Infinite Loop
我不明白爲什麼它不擺在首位,或者爲什麼,當我把它變成一個無限循環,它突然開始工作工作...
PS:這裏是updateChat插槽:
void ChatDialog::updateChat(QString text)
{
this->ui->tbConv->insertPlainText(text);
qDebug() << "Update Chat [" << text << "]";
}
你期待從QtcpSocket哪些信號? – spiritwolfform 2013-03-07 09:23:21
你能提供一個簡短的,可編輯的例子嗎? – bruno 2013-03-07 10:20:20