我试图在服务器上为我的API创建一个客户端类,但我的插槽在请求后不起作用。connect函数返回true,这应该意味着signal和slot相互连接。header file
#ifndef QRESTCLIENT_H
#define QRESTCLIENT_H
#include <QObject>
#include <QUrl>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
class QRestClient : public QObject
{
Q_OBJECT
public:
explicit QRestClient(QUrl root_url, QObject *parent = nullptr);
bool ping();
private:
QUrl root_url;
private slots:
void ping_finished(QNetworkReply * response);
};
#endif // QRESTCLIENT_H
cpp file
#include "qrestclient.h"
QRestClient::QRestClient(QUrl root_url, QObject *parent)
: QObject{parent}
{
this->root_url = root_url;
}
void QRestClient::ping_finished(QNetworkReply * response) {
qDebug() << "It is here 3";
qDebug() << response->readAll();
};
bool QRestClient::ping()
{
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
qDebug() << connect(manager, &QNetworkAccessManager::finished,
this, &QRestClient::ping_finished);
qDebug() << "It is here 1";
manager->get(QNetworkRequest(this->root_url));
qDebug() << "It is here 2";
return true;
};
我试着在mainwindow.cpp
文件中写同样的东西,它就像它应该的那样工作。对于来自我的类的ping()
函数的请求,我在服务器日志中没有看到任何请求。如果mainwindow.cpp
的所有内容都相同,我会在日志中看到请求。问题是什么,为什么不发送请求?
1条答案
按热度按时间gc0ot86w1#
正如@Botje所说,问题是QRestClient对象在调用代码结束时被销毁,然后才得到响应。解决方案是将其放在调用类的私有属性中。