Сокет QT ждет ввода пользователя - PullRequest
1 голос
/ 29 мая 2020

Я пытаюсь разработать простой сервер с аутентификацией basi c, у меня есть следующий код:

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;

, но это не ждет ввода пользователя и go дальше. Я бы хотел, чтобы эта функция ждала ввода пользователем строки переменной длины до возврата каретки. но как?

1 Ответ

1 голос
/ 29 мая 2020

Вы можете подключить слот к сигналу readyRead() сокета и обработать вход там.
(https://doc.qt.io/qt-5/qiodevice.html#readyRead)
Но для этого вам понадобится событие l oop работает в потоке, в котором находится сокет.
(https://doc.qt.io/archives/qt-4.8/qeventloop.html)

Другим решением было бы использовать waitForReadyRead(-1) сокета. Это заблокирует поток и испустит сигнал readyRead(). Функция вернет true, если сигнал будет испущен. Но вам также понадобится запущенное событие l oop.
(https://doc.qt.io/qt-5/qabstractsocket.html#waitForReadyRead)

...