我得到了信號和插槽的問題,當我從主函數調用test()函數時,信號和插槽不工作(它們不是調用),但是當我在main函數中直接調用test()中的代碼,調用signal和slots!我做錯了什麼? 第二個問題,有什麼方法可以返回響應嗎?我需要在頁面上找到一些東西。Qt信號插槽不被調用
的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答覆指針是響應。您也可能想通過此:http://stackoverflow.com/questions/1053099/how-can-i-get-content-of-web-page – Metoo
不要忘記處理錯誤。 –