Как определить объект QNetworkRequest из cpp в qml

Я сделал часть страницы регистрации в QML и обработал textInput с помощью функции setContextProperty . Но у меня проблема, когда мне нужно сделать запрос на публикацию. Ответственный за этот метод

void NetworkManager::sendRequest(const QNetworkRequest &request, const QJsonObject &data) {
    QNetworkReply *reply = m_manager->post(request, QJsonDocument(data).toJson());
    m_replies.append(reply);
}

m_manager и m_replies определены в классе, поэтому

private:
    QNetworkAccessManager *m_manager;
    QList<QNetworkReply *> m_replies;

Я пытался использовать метод sendRequest внутри onClicked сигнала на кнопке reg. Но если я пытаюсь определить объект QNetworkRequest в QML, у меня возникает ошибка:
нет соответствующей функции для вызова 'QQmlContext::setContextProperty(const char[15], QNetworkRequest&)'

Я прочитал документацию QQmlContext и QVariant и понял, что не могу определить объект QNetworkRequest таким образом. Я пытался определить кнопку из QML в C++ с помощью objectName и использовать сигналы и слоты, но это не сработало. Может быть, кто-нибудь знает какие-либо методы определения объектов C++ в QML или QML в C++? Я еще не нашел его.

Возможно, это не по теме, но существует XMLHttpRequest, который можно определить и использовать в QML вообще без использования C++.

folibis 08.04.2024 15:13
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
83
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я нашел решение своей проблемы:

engine.rootContext()->setContextProperty("UserRegRequest", QVariant::fromValue(UserRegRequest));

Создайте объект QML из C++ с указанными свойствами

Как только вы найдете решение, мы не закрываем вопрос, а оставляем его открытым, чтобы будущие посетители могли найти ваш вопрос и ответы на него. Кроме того, другие пользователи могут оставить больше ответов, если будут найдены лучшие/другие решения. Вместо этого вы можете нажать на галочку в своем ответе, чтобы она стала зеленой, сигнализируя будущим пользователям, что именно этот ответ решил вашу проблему.

Fastnlight 08.04.2024 18:06

Я понял, что это не решение, потому что получаю сообщение об ошибке: сервер ответил: «Неверный запрос». Но если я делаю URL-адрес жесткого кода внутри метода sendRequest, все работает. Это означает, что если мне нужно выполнить запрос на публикацию для нескольких страниц, мне нужно создать несколько аналогичных методов sendRequest с жестко заданным URL-адресом внутри методов sendRequest.

Ответ принят как подходящий

Ну, у меня нет идей, как определить объект QNetworkRequest из cpp в qml. По этой причине я создал несколько идентичных методов с жестким URL-адресом внутри и элементами запроса.

void NetworkManager::sendAuthRequest(QString authPhone){
    QUrl url("http://89.221.60.161:3000/api/auth/login");

    QUrlQuery query;
    QByteArray postData;
    query.addQueryItem("phone", authPhone);
    query.addQueryItem("notificationToken", "d3ef6dac-38b5-442e-898b-b030d014efb9");

    postData = query.toString(QUrl::FullyEncoded).toUtf8();

    QNetworkRequest request(url);
    request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded");

    m_manager->post(request, postData);

};

параметры функции передаются из qml, где я заранее определил параметры

    onClicked:{
        var authPhone = inputNumber.text
        manager.sendAuthRequest(authPhone);
    }

Мне не нравится это решение, но, возможно, оно кому-то поможет или кто-то предложит лучшее решение.

Другие вопросы по теме