插槽错误使用QNetworkAccessManager [英] slot error using QNetworkAccessManager

查看:163
本文介绍了插槽错误使用QNetworkAccessManager的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试实施基本的http连接 http://developer.nokia.com/community / wiki / Creating_an_HTTP_network_request_in_Qt 到Qt,但我很难实施插槽。我是一个Qt新手。



C:\Qt5\Tools\QtCreator\bin\miniHTTP\main.cpp:10:错误:请求'mTest'中的成员'Test',它是非类型'coreEng()'
mTest.Test();



// main。 cpp

  #include< QCoreApplication> 
#include< coreeng.h>


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

coreEng mTest;
mTest.Test()
return a.exec();
}

// coreeng.h

  #ifndef COREENG_H 
#define COREENG_H
#include< QDebug>
#include< QObject>
#include< QNetworkAccessManager>

class coreEng:public QObject
{
Q_OBJECT
public:
explicit coreEng(QObject * parent = 0);
void Test();
私有插槽:

公共插槽:
void connect();
void url();
void finishedSlot();


private:
QNetworkAccessManager * nam;

};

#endif // COREENG_H

// coreeng.cpp

  #includecoreeng.h
#include< QNetworkAccessManager>
#include< QUrl>
#include< QNetworkRequest>
#include< QNetworkReply>
#include< QImageReader>

coreEng :: coreEng(QNetworkReply * parent):
QObject(parent)

{
}

void coreEng ::测试();

void coreEng :: connect(){
QObject :: connect(nam,SIGNAL(finished(QNetworkReply *)),
this,SLOT(finishedSlot(QNetworkReply *)) );
}

void coreEng :: url(){
QUrl url(http://www.forum.nokia.wiki);
QNetworkReply * reply = nam-> get(QNetworkRequest(url));
}


void coreEng :: finishedSlot(QNetworkReply * reply){

QVariant statusCodeV = reply-> attribute(QNetworkRequest :: HttpStatusCodeAttribute) ;

QVariant redirectionTargetUrl = reply-> attribute(QNetworkRequest :: RedirectionTargetAttribute);

if(reply-> error()== QNetworkReply :: NoError)
{

QImageReader imageReader(reply);
QImage pic = imageReader.read();

QByteArray bytes = reply-> readAll(); // bytes
QString string(bytes); // string
}

else
{

}

delete reply;

}


解决方案

是你遇到最烦躁的解析: http://en.wikipedia.org/wiki/Most_vexing_parse



最讨厌的解析(C ++)



更改

  coreEng mTest 

  coreEng mTest;第二个问题是你的构造函数在coreeng.cpp中有错误的签名


更改:

  coreEng :: coreEng(QNetworkReply *):
QObject )

 code> coreEng :: coreEng(QObject * parent):
QObject(parent)


I am trying to implement a basic http connection http://developer.nokia.com/community/wiki/Creating_an_HTTP_network_request_in_Qt into Qt but I have difficultly implementing the slot. I am a Qt novice.

C:\Qt5\Tools\QtCreator\bin\miniHTTP\main.cpp:10: error: request for member 'Test' in 'mTest', which is of non-class type 'coreEng()' mTest.Test();

//main.cpp

#include <QCoreApplication>
#include <coreeng.h>


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

    coreEng mTest;
    mTest.Test();
    return a.exec();
}

//coreeng.h

#ifndef COREENG_H
#define COREENG_H
#include <QDebug>
#include <QObject>
#include <QNetworkAccessManager>

class coreEng : public QObject
{
    Q_OBJECT
public:
    explicit coreEng(QObject *parent = 0);
    void Test();
private slots:

public slots:
    void connect();
    void url();
    void finishedSlot();


private:
    QNetworkAccessManager* nam;

};

#endif // COREENG_H

//coreeng.cpp

#include "coreeng.h"
#include <QNetworkAccessManager>
#include <QUrl>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QImageReader>

coreEng::coreEng(QNetworkReply* parent) :
    QObject(parent)

{
}

void coreEng::Test();

void coreEng::connect(){
    QObject::connect(nam, SIGNAL(finished(QNetworkReply*)),
    this, SLOT(finishedSlot(QNetworkReply*)));
}

void coreEng::url(){
    QUrl url("http://www.forum.nokia.wiki");
    QNetworkReply* reply = nam->get(QNetworkRequest(url));
}


void coreEng::finishedSlot(QNetworkReply* reply){

    QVariant statusCodeV = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);

    QVariant redirectionTargetUrl = reply->attribute(QNetworkRequest::RedirectionTargetAttribute);

    if (reply->error() == QNetworkReply::NoError)
    {

        QImageReader imageReader(reply);
        QImage pic = imageReader.read();

        QByteArray bytes = reply->readAll();  // bytes
        QString string(bytes); // string
    }

    else
    {

    }

    delete reply;

}

解决方案

One problem is you are running into the most vexing parse: http://en.wikipedia.org/wiki/Most_vexing_parse

Most vexing parse(C++)

Change

coreEng mTest();

to

coreEng mTest;

A second problem is your constructor in coreeng.cpp has the wrong signature

Change:

coreEng::coreEng(QNetworkReply*) :
    QObject(parent)

to

   coreEng::coreEng(QObject* parent) :
        QObject(parent)

这篇关于插槽错误使用QNetworkAccessManager的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆