Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.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 - Fatal编程技术网

C++ 为什么Qt信号永远不会发出?

C++ 为什么Qt信号永远不会发出?,c++,qt,C++,Qt,我试图从网页中获取数据,但信号finished()从未发出!!!我知道我一定是做错了什么,但我想不出是什么 # webservice.h class WebService:public QObject { Q_OBJECT public: explicit WebService(QObject *parent=0); void getRequest(const QString &urlString); signals: void networkErr

我试图从网页中获取数据,但信号
finished()
从未发出!!!我知道我一定是做错了什么,但我想不出是什么

# webservice.h
class WebService:public QObject
{
    Q_OBJECT

 public:
    explicit WebService(QObject *parent=0);
    void getRequest(const QString &urlString);

signals:
    void networkError(QNetworkReply::NetworkError ne);
    void finished(QNetworkReply*);

public slots:
    void parseNetworkResponse(QNetworkReply* finished);

private:
    QNetworkAccessManager *netMgr;

public:
    QByteArray data;
};

#webservice.cpp
WebService::WebService(QObject *parent):QObject(parent)
{
    netMgr = new QNetworkAccessManager;

    connect(netMgr, SIGNAL(finished(QNetworkReply*)),
                 this, SLOT(parseNetworkResponse(QNetworkReply*)));
}

void WebService::getRequest(const QString &urlString)
{
    QUrl url(urlString);
    QNetworkRequest req;
    emit finished(netMgr->get(req));
}

void WebService::parseNetworkResponse(QNetworkReply *finished)
{
    if (finished->error() != QNetworkReply::NoError)
    {
        emit networkError(finished->error());
        return;
    }

    data = finished->readAll();

   qDebug() << data;
}
#webservice.h
类WebService:公共QObject
{
Q_对象
公众:
显式Web服务(QObject*parent=0);
void getRequest(const QString和urlString);
信号:
无效networkError(QNetworkReply::networkError ne);
作废完成(QNetworkReply*);
公众时段:
无效parseNetworkResponse(QNetworkReply*完成);
私人:
QNetworkAccessManager*netMgr;
公众:
QByteArray数据;
};
#webservice.cpp
WebService::WebService(QObject*parent):QObject(parent)
{
netMgr=新的QNetworkAccessManager;
连接(netMgr,信号(完成(QNetworkReply*)),
这个插槽(parseNetworkResponse(QNetworkReply*));
}
void WebService::getRequest(常量QString&urlString)
{
QUrl url(url字符串);
QNetworkRequest请求;
发射完成(netMgr->get(req));
}
void WebService::parseNetworkResponse(QNetworkReply*已完成)
{
如果(完成->错误()!=QNetworkReply::无错误)
{
发出networkError(完成->错误());
返回;
}
data=finished->readAll();

qDebug()您没有将url传递给您创建的
QNetworkRequest
。请尝试:

QNetworkRequest req(url);
内部
WebService::getRequest()


根据要求,对源代码进行了修改,以允许它作为控制台应用程序项目中的单个
main.cpp
文件在QtCreator中编译和工作:

#include <QCoreApplication>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QNetworkAccessManager>
#include <QUrl>
#include <QByteArray>
#include <QString>

#include <QDebug>

//# webservice.h
class WebService:public QObject
{
    Q_OBJECT

 public:
    explicit WebService(QObject *parent=0);
    void getRequest(const QString &urlString);

signals:
    void networkError(QNetworkReply::NetworkError ne);
    void finished(QNetworkReply*);

public slots:
    void parseNetworkResponse(QNetworkReply* finished);

private:
    QNetworkAccessManager *netMgr;

public:
    QByteArray data;
};

//#webservice.cpp
WebService::WebService(QObject *parent):QObject(parent)
{
    netMgr = new QNetworkAccessManager;

    connect(netMgr, SIGNAL(finished(QNetworkReply*)),
                 this, SLOT(parseNetworkResponse(QNetworkReply*)));
}

void WebService::getRequest(const QString &urlString)
{
    QUrl url(urlString);
    QNetworkRequest req(url);
    emit finished(netMgr->get(req));
}

void WebService::parseNetworkResponse(QNetworkReply *finished)
{
    if (finished->error() != QNetworkReply::NoError)
    {
        qDebug() << "QNetworkReply error: " << finished->error();
        emit networkError(finished->error());
        return;
    }

    data = finished->readAll();

   qDebug() << data;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    WebService web;
    web.getRequest("http://www.google.com");

    return a.exec();
}

#include "main.moc"

您没有将url传递给您创建的
QNetworkRequest
。请尝试:

QNetworkRequest req(url);
内部
WebService::getRequest()


根据要求,对源代码进行了修改,以允许它作为控制台应用程序项目中的单个
main.cpp
文件在QtCreator中编译和工作:

#include <QCoreApplication>
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QNetworkAccessManager>
#include <QUrl>
#include <QByteArray>
#include <QString>

#include <QDebug>

//# webservice.h
class WebService:public QObject
{
    Q_OBJECT

 public:
    explicit WebService(QObject *parent=0);
    void getRequest(const QString &urlString);

signals:
    void networkError(QNetworkReply::NetworkError ne);
    void finished(QNetworkReply*);

public slots:
    void parseNetworkResponse(QNetworkReply* finished);

private:
    QNetworkAccessManager *netMgr;

public:
    QByteArray data;
};

//#webservice.cpp
WebService::WebService(QObject *parent):QObject(parent)
{
    netMgr = new QNetworkAccessManager;

    connect(netMgr, SIGNAL(finished(QNetworkReply*)),
                 this, SLOT(parseNetworkResponse(QNetworkReply*)));
}

void WebService::getRequest(const QString &urlString)
{
    QUrl url(urlString);
    QNetworkRequest req(url);
    emit finished(netMgr->get(req));
}

void WebService::parseNetworkResponse(QNetworkReply *finished)
{
    if (finished->error() != QNetworkReply::NoError)
    {
        qDebug() << "QNetworkReply error: " << finished->error();
        emit networkError(finished->error());
        return;
    }

    data = finished->readAll();

   qDebug() << data;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    WebService web;
    web.getRequest("http://www.google.com");

    return a.exec();
}

#include "main.moc"

如何使用
WebService
?能否显示调用
WebService
方法的代码?同时连接到error()信号以正确捕获错误您如何使用
WebService
?能否显示调用
WebService
方法的代码?同时连接到error()发出正确捕获错误的信号也许你可以解释更多关于主要问题是什么(或者发布一个完整的、可编译的示例)。如果我做了回答中提到的修改,我会从
finished->readAll();
中得到响应。当然,假设
urlString
是有效的(我使用了
)http://www.google.com"
在我的测试中)。谢谢Michael,问题就在于此。我确实尝试使用“”同样。它也没有为QByteArray数据变量生成任何输出。上面的程序编译没有错误,我也没有让数据变量输出任何东西。我的url和你的url都是绝对有效的url。我不知道该说什么!!!除非找到解决方案。如果且仅当上面的代码不正确。两件事:1)带ut
“http://”
url上的前缀请求导致出现
QNetworkReply::ProtocolUnknownError
错误,2)您可能需要禁用计算机上的防火墙以允许请求工作。当我回家再次尝试此操作时,应用程序挂起请求,直到我禁用计算机上的防火墙软件。请发送me您编译的示例代码?因为我已经尝试了您所说和推荐的所有内容。顺便说一句:我没有防火墙。感谢Michael所做的一切。这是您的大拇指。也许您可以解释更多关于主要问题的内容(或发布一个完整的、可编译的示例)。如果我做了回答中提到的修改,我会从
完成->readAll();
中得到一个响应。当然,假设
urlString
有效(我使用了
)http://www.google.com“
在我的测试中)。谢谢Michael,问题就在于此。我确实尝试过使用”同样。它也没有为QByteArray数据变量生成任何输出。上面的程序编译没有错误,我也没有让数据变量输出任何东西。我的url和你的url都是绝对有效的url。我不知道该说什么!!!除非找到解决方案。如果且仅当上面的代码不正确。两件事:1)带ut
“http://”
url上的前缀请求导致出现
QNetworkReply::ProtocolUnknownError
错误,2)您可能需要禁用计算机上的防火墙以允许请求工作。当我回家再次尝试此操作时,应用程序挂起请求,直到我禁用计算机上的防火墙软件。请发送m你编译的示例代码?因为我已经尝试了你所说的和推荐的所有内容。顺便说一句:我没有防火墙。谢谢迈克尔所做的一切。祝你大拇指。