Задать вопрос
@determiinant

Почему только после второго нажатия на кнопку клиент отображает данные от сервера?

Здраствуйте. Пишу клиент-серверный чат на Qt. Сервер берет с базы данных данные об юзере, его пароль и ник. Когда пользователь ввел в окно свои данные, сервер ищет юзера в БД, и отсылает сообщение клиенту "User is exists", если юзер уже существует. У клиента есть метод sockReady().
void LoginRegister::sockReady()
{
    Data = socket->readAll();
    QString text = QString(Data);
    qDebug()<<"from loginregister "<<text;
    if(text=="User is exists")
    {
        ui->lineEditMessage->setText("User is exists");
    }
}


Здесь просто на консоле отображает сообщение и в соотвествуещем lineEdit меняет текст. Этот lineEdit предназначен для вывода ошибки, как вот если такой юзер уже зарегестрирован.
Когда я ввела данные и нажимаю на кнопку REGISTER выполняеться данный код
if(isValidName(user.getName()) && isValidPassword(user.getPassword())==-1)
    {
        //auto win = new firstwindow(this, 1);
        if(openForAction==2)//если была нажата кнопка регистрации
        {
            this->socket->write(QString("reg "+user.getName()+" "+user.getPassword()).toUtf8());
            if(ui->lineEditMessage->text()=="User is exists")
                qDebug()<<"USER IS EXISTS VXOD NEVOZMOZHEN";
        }
        else if(openForAction==1)
        {
            this->socket->write(QString("log "+user.getName()+" "+user.getPassword()).toUtf8());
        }
        //win->setAttribute( Qt::WA_DeleteOnClose);
        //win->show();
        //this->hide();
    }

Здесь сокет клиента отсылает данные о том что это реестрация, сервер обрабатывает эти данные, и по логике в методе sockReady обрабатываются данные полученные с сервера. И далее я просто проверяю, текст в моем lineEdit "User is exists" ? Да. (потому что ввожу уже существующего юзера, для наглядности примера). Но это условие не выполняеться с первого раза. Когда я нажимаю второй раз на кнопку Register, оно уже заходит в мое условие, и отображает "USER IS EXISTS VXOD NEVOZMOZHEN". Я не понимаю, почему только со второго раза это делается?
Помогите пожалуйста, скоро дедлайн, а я уже 3-й день над этой ошибкой сижу. Заранее спасибо!
  • Вопрос задан
  • 48 просмотров
Подписаться 1 Средний 3 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы