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)
我正在尝试开发一个带有基本身份验证的简单服务器, 我有以下代码:
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)