2011-09-16 206 views
0

我想发送POST数据到使用QT的PHP页面。我的代码如下:Qt不会发送POST数据

#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*)’ 

现在根据这个How can I POST data to a url using QNetworkAccessManager和Qt文档这里http://doc.qt.io/qt-5/qnetworkaccessmanager.html我做的一切权利。哎呀,我甚至可以复制和粘贴从QT Docs网站的代码,并获得相同的错误。我在这里错过了什么?

编辑 如果我尝试在这里How to send data back from PHP after a HTTP Post in 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) 
+0

什么是您尝试连接的对象/方法? (null):: configurationAdded看起来像对象创建失败,或者甚至它不是MOCed(你想连接的所有对象必须扩展QObject并在类定义中有Q_OBJECT宏) – VitaminP

+1

我认为这个问题(来自Edit2)是你的插槽不是你的'Transmissions'类的成员,它只是一个独立的函数,使你的头文件看起来像:'class Transmissions:public QObject(){slots:void configurationAdded(..) ; void configurationRemoved(...);}'etc. – docsteer

+0

@docsteer,你的权利。我从来没有把这些放在我的头文件中。我在这里找到了一些文档doc.qt.nokia.com/stable/qnetworkconfigurationmanager.html看起来我没有我不懂信号和插槽 – CountMurphy

回答

3

这是这一行: QNetworkAccessManager * NETWORKMANAGER =新QNetworkAccessManager(本);

这是错的,你试图用一个指向Transmissions的指针(通过“this”)来构造它,我猜测它是你的一个类。替换为: QNetworkAccessManager * networkManager = new QNetworkAccessManager;

如果指针指向一个QObject,则只能传递此指针(请参阅您在Qt中链接的文档)。另外,你可以让你的类扩展QObject。

由于传输不会扩展QObject,因此当您传入“this”时连接(...)也不起作用。

+0

你先生是圣人,有一个问题,我得到一堆错误,我更新了我的问题。 – CountMurphy