QT套接字等待用户输入

QT socket wait for user input

我正在尝试开发一个带有基本身份验证的简单服务器, 我有以下代码:

socket = new QTcpSocket();
connect(socket,SIGNAL(readyRead()),this,SLOT(readyRead()),Qt::DirectConnection);
connect(socket,SIGNAL(disconnected()),this,SLOT(disconnected()),Qt::DirectConnection);
check_user();

....... check_user() 是

socket->write("Please enter username:");
socket->flush();
QStringList list;
while (socket->canReadLine())
{
    QString data = QString(socket->readLine());
    if ( data == "\r\n" )
        break;
    list.append(data);
}
qDebug()<<list;

但这并不等待用户输入,而是更进一步。 我希望此函数等待用户输入可变长度的字符串,直到回车 return。 但是如何?

您可以将插槽连接到套接字的 readyRead() 信号并在那里处理输入。
(https://doc.qt.io/qt-5/qiodevice.html#readyRead)
但是为了让它工作,你需要在套接字所在的线程中有一个事件循环运行。
(https://doc.qt.io/archives/qt-4.8/qeventloop.html)

另一个解决方案是使用 waitForReadyRead(-1) 的套接字。这将阻塞线程并发出 readyRead() 信号。如果发出信号,该函数将 return true。但是您还需要一个 运行 事件循环。
(https://doc.qt.io/qt-5/qabstractsocket.html#waitForReadyRead)