C++ 对';连接';(QT)
我是新来写QT代码的。我编写了一个简单的http客户端代码(Qt版本是5.9)。我定义了一个名为C++ 对';连接';(QT),c++,qt,compiler-errors,qobject,C++,Qt,Compiler Errors,Qobject,我是新来写QT代码的。我编写了一个简单的http客户端代码(Qt版本是5.9)。我定义了一个名为my_http\u client的类,它派生了Qobject,我使用QNetworkAccessManager类来创建http连接。我创建了3个文件,一个是main.cpp,另外两个是my_http_client.h和my_http_client.cpp。文件my_http_client.cpp中定义的my_http_client类。好的,看,这是我的代码。当我编译我的项目时,它有错误 D:\Docu
my_http\u client
的类,它派生了Qobject
,我使用QNetworkAccessManager
类来创建http连接。我创建了3个文件,一个是main.cpp,另外两个是my_http_client.h和my_http_client.cpp。文件my_http_client.cpp中定义的my_http_client
类。好的,看,这是我的代码。当我编译我的项目时,它有错误
D:\Documents\code\c++\qt_console\http\http_client\my_http_client.cpp:16: error: no matching function for call to 'my_http_client::connect(QNetworkReply*&, const char*, my_http_client*, const char*)'
QObject::connect(rep_QNetworkReply, SIGNAL(finished()), this, SLOT(httpFinished()));
我不知道发生了什么,我试图解决它,但我做不到。我认为
.
这个答案解决不了我的问题,请帮帮我。我是如何纠正错误的。谢谢
我的http\u客户端.h
#ifndef MY_HTTP_CLIENT_H
#define MY_HTTP_CLIENT_H
/*create by victory, time: 2020/05/16
This file define a simple httpclient class,support basic http request
*/
#include <QObject>
#include <QNetworkAccessManager>
QT_BEGIN_NAMESPACE
class QNetworkAccessManager;
class QNetworkReply;
QT_END_NAMESPACE
class my_http_client : public QObject
{
Q_OBJECT
public:
explicit my_http_client(QObject *parent = Q_NULLPTR);
~my_http_client(); //destructor
public:
void get(const QUrl &url);
private:
QNetworkAccessManager *manager;
QNetworkReply* rep_QNetworkReply;
private slots:
void httpFinished();
void httpReadyRead();
};
#endif // MY_HTTP_CLIENT_H
\ifndef MY_HTTP_CLIENT\H
#定义我的\u HTTP\u客户端\u H
/*胜利创造,时间:2020/05/16
该文件定义了一个简单的httpclient类,支持基本http请求
*/
#包括
#包括
QT_开始名称空间
QNetworkAccessManager类;
QNetworkReply类;
QT_END_名称空间
类my_http_客户端:public QObject
{
Q_对象
公众:
显式my_http_客户端(QObject*parent=Q_NULLPTR);
~my_http_client();//析构函数
公众:
void get(const-QUrl和url);
私人:
QNetworkAccessManager*管理器;
QNetworkReply*代表QNetworkReply;
专用插槽:
void httpFinished();
无效httpReadyRead();
};
#endif//MY\u HTTP\u CLIENT\H
我的http\u客户端.cpp
#include "my_http_client.h"
#include <iostream>
my_http_client::my_http_client(QObject *parent)
: QObject(parent)
{
this->manager = new QNetworkAccessManager(this);
}
//client send get request
void my_http_client::get(const QUrl &url)
{
this->rep_QNetworkReply = this->manager->get(QNetworkRequest(url));
connect(rep_QNetworkReply, SIGNAL(finished()), this, SLOT(httpFinished()));
//connect(rep_QNetworkReply, SIGNAL(readyRead()), this, SLOT(httpReadyRead()));
}
//QNetworkReply send a finished siganl
//function replyFinished recv it and handle it
void my_http_client::httpFinished()
{
std::cout << "httpFinished: " << rep_QNetworkReply << std::endl;
QVariant redirectionTarget = rep_QNetworkReply->attribute(QNetworkRequest::RedirectionTargetAttribute);
if (rep_QNetworkReply->error())
{
std::cerr << "get failed: " << rep_QNetworkReply->errorString() << std::endl;
}
rep_QNetworkReply->deleteLater();
rep_QNetworkReply = Q_NULLPTR;
}
void my_http_client::httpReadyRead()
{
std::cout << "httpReadyRead: " << std::endl;
std::cout << rep_QNetworkReply->readAll() << std::endl;
}
my_http_client::~my_http_client()
{
delete this->manager;
}
#包括“my_http_client.h”
#包括
my_http_客户端::my_http_客户端(QObject*parent)
:QObject(父对象)
{
此->管理器=新的QNetworkAccessManager(此);
}
//客户端发送获取请求
void my_http_client::get(const-QUrl&url)
{
this->rep_QNetworkReply=this->manager->get(QNetworkRequest(url));
连接(rep_QNetworkReply,信号(finished()),此,插槽(httpFinished());
//连接(rep_QNetworkReply,信号(readyRead()),此,插槽(httpReadyRead());
}
//QNetworkReply发送完成的信号
//函数replyFinished recv it并处理它
void my_http_client::httpFinished()
{
std::cout尝试在我的http\u client.h
中添加#include
,它为我解决了问题
另外,我建议将std
日志替换为qDebug()
和qCritical()
,从#include
()您的插槽void httpFinished()
必须更改为void httpFinished(QNetworkReply*)
。基本上,信号和插槽之间必须匹配签名。仅供参考:我找到了关于QNetworkReply
的手册,它已经完成了
siganl,没有输入参数。要接受答案,你应该按下应答的向上投票和向下投票按钮下的勾号图标。更多详细信息请访问页面:是的,我已经准备好了完成了。谢谢你的回答
#include <QCoreApplication>
#include "my_http_client.h"
/*this is a sample http client, create it by victory*/
/*time is 2020:05:16*/
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
my_http_client pClient;
pClient.get(QUrl("http://127.0.0.1:8888/index.html"));
return a.exec();
}