alex_lip
alex_lipҚар. 13, 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 Т.Ж.

              Хотя я решил вопрос на стороне сервера ))). Просто 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 Т.Ж.

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

                    Пікірлер

                    Тек рұқсаты бар пайдаланушылар ғана пікір қалдыра алады.
                    Кіріңіз немесе Тіркеліңіз
                    Г

                    C++ - Тест 001. Первая программа и типы данных

                    • Нәтиже:66ұпай,
                    • Бағалау ұпайлары-1
                    t

                    C++ - Тест 001. Первая программа и типы данных

                    • Нәтиже:33ұпай,
                    • Бағалау ұпайлары-10
                    t

                    Qt - Тест 001. Сигналы и слоты

                    • Нәтиже:52ұпай,
                    • Бағалау ұпайлары-4
                    Соңғы пікірлер
                    G
                    GoattRockҚыр. 3, 2024, 1:50 Т.Қ.
                    Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
                    d
                    dblas5Шілде 5, 2024, 11:02 Т.Ж.
                    QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                    k
                    kmssrАқп. 8, 2024, 6:43 Т.Қ.
                    Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                    АК
                    Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
                    Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                    Енді форумда талқылаңыз
                    Evgenii Legotckoi
                    Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
                    добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                    F
                    FynjyШілде 22, 2024, 4:15 Т.Ж.
                    при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
                    BlinCT
                    BlinCTМаусым 25, 2024, 1 Т.Ж.
                    Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
                    BlinCT
                    BlinCTМамыр 5, 2024, 5:46 Т.Ж.
                    Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
                    Evgenii Legotckoi
                    Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
                    Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

                    Бізді әлеуметтік желілерде бақылаңыз