使用QNetworkAccessManager时槽位错误
slot error using QNetworkAccessManager
我正试图实现一个基本的http连接http://developer.nokia.com/community/wiki/Creating_an_HTTP_network_request_in_Qt到Qt,但我很难实现插槽。我是一个Qt新手。
C:Qt5ToolsQtCreatorbinminiHTTPmain.cpp:10:错误:请求成员'Test'在'mTest'中,这是非类类型'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;
}
您已经在头文件中将void Test();
声明为成员函数,并且没有在cpp文件中实现它。你应该实现它:
void coreEng::Test()
{
...
}
除了已经描述的其他问题之外,您的finished slot实现没有与函数定义相同的签名。在你的。h文件中有:
void finishedSlot();
而你的。cpp有:
void finishedSlot(QNetworkReply *reply) {
/*code here*/
}
总结一下:
添加测试函数的实现:
空白coreEng::测试(){/代码/}
修复构造函数的签名,使。cpp和。h文件一致:
coreEng::coreEng(QObject* parent): QObject(parent) {/这里的代码/}
修复你的finishedSlot的签名,使。cpp和。h文件一致:
void finishedSlot(QNetworkReply *reply);
这些更改至少会使您到达成功编译的阶段。
一个问题是您正在运行最令人烦恼的解析:http://en.wikipedia.org/wiki/Most_vexing_parse
最烦人的解析
改变coreEng mTest();
coreEng mTest;
第二个问题是coreeng.cpp中的构造函数有错误的签名
改变:
coreEng::coreEng(QNetworkReply*) :
QObject(parent)
coreEng::coreEng(QObject* parent) :
QObject(parent)
相关文章:
- 在 C++ 中使用正则表达式错误时出现问题 括号表达式中的范围无效
- 是否值得降低我的代码的可读性,以便在出现内存不足错误时提供异常安全性?
- C++:处理抽象类中的错误时出现问题
- C++ wmain 函数错误时使用 Unicode
- 我在解决此错误时遇到问题.我正在努力在主函数中传递数组
- 当警告为错误时使用 [[已弃用]] 属性 (-Werror)
- 当发生套接字错误时,作为QWebSocket基础的QTcpSocket(或QSslSocket)是否会自行销毁
- 当 C++ 中函数参数的输入类型(类)错误时的错误处理
- 当有 icqdesktop 错误时如何编辑制作文件 (制作: *** [所有] 错误 2) Ubuntu 18.04 6
- CMake / 错误时链接 libfreeimage / libtiff.
- 当构造函数的参数类型错误时引发异常
- 如何对 SFINAE 进行"deep",即当替换导致代码中进一步出现一些编译错误时?
- 遇到内部编译错误时该怎么办
- 在计算机级别,应用程序以二进制方式运行,然后当发生运行时错误时,它如何呈现回错误代码
- 链接错误时,使用CLION/CMAKE/MSVC 2015编译WIN32应用程序
- 如何防止Visual Studio 2008 C编译器在发生某些错误时停止?
- 出现分段错误时,更改显示的消息错误
- 如何使 cppcheck 在错误时停止
- 我的代码在执行过程中运行良好.但是当我去提交它的显示分割错误时
- 使用QNetworkAccessManager时槽位错误