alex_lip
alex_lip13 ноября 2017 г. 8:48

Опять NetworkAccessManager

Все пытаюсь выполнить два запроса в одной сессии. Мне нужно обработать два replay от одного accessmanager. Как мне правильно описать функцию onResult и ее вызвать в этой конструкции

connect(replay,QNetworkReply::finished,this,AppCore::onResult(QNetworkReply *reply));
Вы говорили что писать SIGNAL() и SLOT() - нехорошо. Я опять запутался.



 networkManager = new QNetworkAccessManager();
      url = server_ip_loc+"search/sea/"+text;
      url_context =server_ip_loc+"in_put/set_cont";
      QNetworkRequest request( url_context );
      request.setHeader( QNetworkRequest::ContentTypeHeader, "application/json" );
        QJsonObject json
            {
                {"id", user_id}
            };
    QEventLoop loop;
    QNetworkReply* replay_cont =  networkManager->post(request, QJsonDocument(json).toJson());
    QObject::connect(replay_cont,&QNetworkReply::finished,&loop,&QEventLoop::quit);
    loop.exec();
    QNetworkReply *replay =  networkManager->get(QNetworkRequest(QUrl(url)));
connect(replay,QNetworkReply::finished,this,AppCore::onResult(QNetworkReply *reply));
Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

9
alex_lip
  • 13 ноября 2017 г. 8:54

И как выставить QNetworkConfigurationManager::NetworkSessionRequired тоже непонятно. Везде в примерах ну очень муторно!

    Evgenii Legotckoi
    • 13 ноября 2017 г. 9:12

    Я бы подключился как обычно, также к QNetworkAccessManager`у вместо QNetworkReply.

    connect(networkManager,QNetworkManager::finished,this,AppCore::onResult);
    А вот второй запрос
    QNetworkReply *replay =  networkManager->get(QNetworkRequest(QUrl(url)));
    выполнил бы уже в методе onResult()

    Просто нужно определить какой запрос в данный момент выполняется. Можно сделать некую переменную, которая будет содержать текузее состояние. Например, что это идёт POST запрос, а как только пришёл исправный ответ, то поменять эту переменную и выполнить GET запрос.

    Что касается нового синтаксис сигналов и слотов, то я накидал заметку на эту тему .

    С QNetworkConfigurationManager пока не подскажу, смотреть нужно. Но сделайте для начала последовательный вызов запросов. Первый запрос как обычно вызываете, а второй уже в методе onResult, в том случае, если первый выполнился исправно.


      alex_lip
      • 13 ноября 2017 г. 9:28

      Пробовал  - плохо получается. С LOOP хотя бы последовательность есть. Там железно сначала один идет запрос , потом другой.

      Object::connect(replay_cont,&QNetworkReply::finished,&loop,&QEventLoop::quit);
        Evgenii Legotckoi
        • 14 ноября 2017 г. 2:46

        В любом случае, ответ нужно принимать через метод finished у QNetworkAccessManager.

        connect(networkManager,QNetworkManager::finished,this,AppCore::onResult);
        Используйте переменную в классе для определения того, какой сейчас запрос необходимо обработать. И через условие if-else выбирайте обработчик, который будет актуален для текущего запроса в метода onResult .

        По окончании первого запроса после строки
        loop.exec();
        Устанавливайте переменную на обработку второго запроса.
        Переменная в данном случае будет представлять из себя что-то вроде флага, который будет указывать на то, какой сейчас запрос нужно обработать.
          alex_lip
          • 14 ноября 2017 г. 3:51

          А почему нельзя вешать на replay?

                  QNetworkRequest webservice1Request;
                  // @todo setup webservice1Request.
                  QNetworkReply * const reply1 = networkAccessManager->get(webservice1Request);
                  connect(reply1, QNetworkReply::finished, this, MyClass::getUserName);
          
                  QNetworkRequest webservice2Request;
                  // @todo setup webservice2Request.
                  QNetworkReply * const reply2 = networkAccessManager->get(webservice2Request);
                  connect(reply2, QNetworkReply::finished, this, MyClass::getUserAddress);
            Evgenii Legotckoi
            • 14 ноября 2017 г. 3:55

            Да в принципе можно, только Вам тогда нужно сделать замыкание через лямбду на этот reply, чтобы из него брать ответную информацию. А networkManager возвращает текущий ответ.

              alex_lip
              • 14 ноября 2017 г. 4:00

              Хотя я решил вопрос на стороне сервера ))). Просто SQL View по другому сделал. Без контекста. Но теоретически все равно интересно.  Где надо принимать ответ через NetworkManager, а где через NetworkReplay. В книжке Макса Шлее написано, что как раз QNetworkReplay содержит данные ответа.

              И все-таки где сессия начинается и где заканчивается?

              PS. Ваша заметка про синтаксис сигналов и слотов хороша, но она скорее для продвинутых. Вот здесь немного проще - https://habrahabr.ru/post/141983/ - может быть добавите пару абзацев сначала для начинающих.

                Evgenii Legotckoi
                • 14 ноября 2017 г. 4:05
                • (ред.)

                Уже давно всё есть на сайте про сигналы и слоты:

                1. Сигналы и слоты
                2. Перегрузка сигналов и слотов
                3. Сигналы и слоты в Qt QML
                4. Сигналы и слоты в PyQt5
                И в конце статьи есть тот же самый список дополнительно рекомендуемых статей
                  alex_lip
                  • 14 ноября 2017 г. 4:38

                  Извините пожалуйста. Не увидел.  Очень сложно всю необходимую матчасть прочитать когда работаешь и по работе тебе это в принципе не нужно. Я для себя придумал задачу и пытаюсь ее написать. Буду изучать. Спасибо.

                    Комментарии

                    Только авторизованные пользователи могут публиковать комментарии.
                    Пожалуйста, авторизуйтесь или зарегистрируйтесь
                    AD

                    C++ - Тест 004. Указатели, Массивы и Циклы

                    • Результат:50баллов,
                    • Очки рейтинга-4
                    m
                    • molni99
                    • 26 октября 2024 г. 9:37

                    C++ - Тест 004. Указатели, Массивы и Циклы

                    • Результат:80баллов,
                    • Очки рейтинга4
                    m
                    • molni99
                    • 26 октября 2024 г. 9:29

                    C++ - Тест 004. Указатели, Массивы и Циклы

                    • Результат:20баллов,
                    • Очки рейтинга-10
                    Последние комментарии
                    i
                    innorwall14 ноября 2024 г. 20:42
                    Как Копировать Файлы в Linux If only females relatives with DZ offspring were considered these percentages were 23 order priligy online uk
                    i
                    innorwall14 ноября 2024 г. 18:09
                    Qt/C++ - Урок 068. Hello World с использованием системы сборки CMAKE в CLion ditropan pristiq dosing With the Yankees leading, 4 3, Rivera jogged in from the bullpen to a standing ovation as he prepared for his final appearance in Chicago buy priligy pakistan
                    i
                    innorwall14 ноября 2024 г. 13:05
                    EVILEG-CORE. Использование Google reCAPTCHA 2001; 98 29 34 priligy buy
                    i
                    innorwall14 ноября 2024 г. 13:00
                    PyQt5 - Урок 007. Работаем с QML QtQuick (Сигналы и слоты) priligy 30mg Am J Obstet Gynecol 171 1488 505
                    Сейчас обсуждают на форуме
                    i
                    innorwall14 ноября 2024 г. 12:39
                    добавить qlineseries в функции priligy amazon canada 93 GREB1 protein GREB1 AB011147 6
                    i
                    innorwall11 ноября 2024 г. 19:55
                    Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
                    9
                    9Anonim25 октября 2024 г. 17:10
                    Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
                    ИМ
                    Игорь Максимов3 октября 2024 г. 12:05
                    Реализация навигации по разделам Спасибо Евгений!

                    Следите за нами в социальных сетях