Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对';连接';(QT)_C++_Qt_Compiler Errors_Qobject - Fatal编程技术网

C++ 对';连接';(QT)

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

我是新来写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:\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();
}