【发布时间】:2014-01-30 00:48:58
【问题描述】:
我遇到了信号和插槽问题,当我从主函数调用 test() 函数时,信号和插槽不起作用(它们没有调用),但是当我从 test() 调用代码时直接在 main 函数中,调用信号和槽!我做错了什么? 第二个问题,有没有办法返回响应?我需要在页面上找到一些东西。
main.cpp
void test()
{
httpManager manager;
manager.sendRequest("http://google.com/");
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MfzBot w;
w.show();
test();
return a.exec();
}
工作 main.cpp :
void test()
{
httpManager manager;
manager.sendRequest("http://google.com/");
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MfzBot w;
w.show();
httpManager manager;
manager.sendRequest("http://google.com/");
return a.exec();
}
httpmanager.cpp:
httpManager::httpManager()
{
QObject::connect(manager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(replyFinished(QNetworkReply*)));
}
QNetworkCookieJar cookies;
void httpManager::sendRequest(const char* url)
{
QNetworkProxyFactory::setUseSystemConfiguration (true);
QByteArray outArray;
QDataStream stream(&outArray, QIODevice::WriteOnly);
manager->setCookieJar(cookies);
QNetworkRequest request(QUrl(url));
manager->post(request, outArray);
}
void httpManager::replyFinished(QNetworkReply *reply)
{
qDebug() << "ok! ";
qDebug() << reply->readAll();
}
httpmanager.h:
class httpManager : public QObject
{
Q_OBJECT
public:
httpManager();
protected slots:
void replyFinished(QNetworkReply *reply);
public:
void sendRequest(const char *url);
private:
QNetworkCookieJar *cookies = new QNetworkCookieJar();
QNetworkAccessManager *manager = new QNetworkAccessManager();
};
【问题讨论】:
-
“有什么办法可以返回响应”是什么意思? .因为在您的插槽replyFinished 中,回复指针是响应。您可能还想通过这个:stackoverflow.com/questions/1053099/…
-
别忘了处理错误。
标签: c++ qt qt5 signals-slots qnetworkaccessmanager