Qt не будет отправлять данные POST - PullRequest
0 голосов
/ 16 сентября 2011

Я пытаюсь отправить данные POST на страницу php, используя QT. Мой код выглядит следующим образом:

#include <QHttp>
#include <QUrl>
#include <QString>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <iostream>
#include <QNetworkAccessManager>
#include <QObject>
....
void Transmissions::Send()
{
 QUrl serviceUrl = QUrl("http://192.168.1.138/postTest.php");
 QByteArray postData;
 QString username="user="+User.Email()+"&";
 QString Passwd="password="+User.Pass();
 postData.append(username);
 postData.append(Passwd);

 QNetworkAccessManager *networkManager = new QNetworkAccessManager(this);
 QObject::connect(networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(serviceRequestFinished(QNetworkReply*)));
 networkManager->post(QNetworkRequest(serviceUrl), postData);
}
....
void serviceRequestFinished(QNetworkReply *reply)
{
 QString data = reply->readAll();
    cerr << data.toStdString()<<endl;

}

Теперь этот код не будет компилироваться. Это ошибки:

error: no matching function for call to ‘QNetworkAccessManager::QNetworkAccessManager(Transmissions* const)’

и

error: no matching function for call to ‘QObject::connect(QNetworkAccessManager*&, const char*, Transmissions* const, const char*)’

Теперь в соответствии с этим Как я могу POST-данные на URL, используя QNetworkAccessManager и документацию QT здесь http://doc.qt.io/qt-5/qnetworkaccessmanager.html Я все делаю правильно Черт возьми, я даже могу скопировать и вставить код с сайта QT Docs и получить ту же ошибку. Что мне здесь не хватает?

EDIT если я попробую метод post, показанный здесь Как отправить данные обратно из PHP после HTTP-сообщения в Qt? Я получаю это:

QObject::connect: Cannot connect (null)::configurationAdded(QNetworkConfiguration) to QNetworkConfigurationManager::configurationAdded(QNetworkConfiguration)

пожалуйста, кто-нибудь поможет

EDIT2 : Благодаря VitaminP мой код теперь компилируется. Но сейчас эта проблема происходит:

QObject::connect: Cannot connect (null)::configurationAdded(QNetworkConfiguration) to QNetworkConfigurationManager::configurationAdded(QNetworkConfiguration)
QObject::connect: Cannot connect (null)::configurationRemoved(QNetworkConfiguration) to QNetworkConfigurationManager::configurationRemoved(QNetworkConfiguration)
QObject::connect: Cannot connect (null)::configurationUpdateComplete() to QNetworkConfigurationManager::updateCompleted()
QObject::connect: Cannot connect (null)::onlineStateChanged(bool) to QNetworkConfigurationManager::onlineStateChanged(bool)
QObject::connect: Cannot connect (null)::configurationChanged(QNetworkConfiguration) to QNetworkConfigurationManager::configurationChanged(QNetworkConfiguration)

1 Ответ

3 голосов
/ 16 сентября 2011

Вот эта строка: QNetworkAccessManager * networkManager = new QNetworkAccessManager (this);

Это неправильно, вы пытаетесь создать его с указателем на Transmissions (через "this"), который яугадайка - один из твоих занятий.Замените его на: QNetworkAccessManager * networkManager = new QNetworkAccessManager;

Вы можете передавать указатель this только в том случае, если он указывает на объект QObject (см. Документы, которые вы связали с Qt).В качестве альтернативы вы можете использовать расширение своего класса QObject.

Так как Transmissions не расширяет QObject, то connect (...) не будет работать, если вы передадите "this".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...