J'utilise la nouvelle syntaxe pour QObject::connect
pour connecter un signal à une fente:New QObject :: syntaxe de connexion ne fonctionne pas
connect(m_pNetworkReply, &QNetworkReply::error, this, &MyClass::onError);
mais je reçois cette erreur bizarre et je ne sais pas pourquoi:
/home/user/Programming/sourcefile.cpp:131: error: no matching function for call to 'MyClass::connect(QNetworkReply*&, <unresolved overloaded function type>, MyClass* const, void (MyClass::*)(QNetworkReply::NetworkError))'
this, &MyClass::onError);
^
la chose étrange est si j'utilise l'ancienne syntaxe, tout fonctionne très bien:
connect(m_pNetworkReply, SIGNAL(QNetworkReply::error(QNetworkReply::NetworkError)),
this, SLOT(MyClass::onError(QNetworkReply::NetworkError)));
En outre, cette connexion w orks bien:
connect(m_pNetworkReply, &QNetworkReply::finished,
this, &MyClass::replyFinished);
également void onError(QNetworkReply::NetworkError);
est un private slot
.
Qu'est-ce que je fais mal?
EDIT:
S'il vous plaît noter que ce n'est pas le code qui devrait fonctionner. J'ai écrit cette classe juste pour isoler le problème; le code devrait compiler si.
MyClass.h:
#ifndef MYCLASS_H
#define MYCLASS_H
#include <QWidget>
#include <QNetworkAccessManager>
#include <QNetworkReply>
class MyClass : public QWidget
{
Q_OBJECT
public:
explicit MyClass(QWidget *parent = 0);
~MyClass();
private slots:
void replyFinished();
void onError(QNetworkReply::NetworkError);
void onSslErrors(QList<QSslError>);
private:
QNetworkAccessManager m_networkAccessManager;
QNetworkReply *m_pNetworkReply;
};
#endif // MYCLASS_H
MyClass.cpp:
#include "myclass.h"
#include <QNetworkRequest>
MyClass::MyClass(QWidget *parent) : QWidget(parent)
{
QNetworkRequest networkRequest;
connect(m_pNetworkReply, &QNetworkReply::finished,
this, &MyClass::replyFinished);
connect(m_pNetworkReply, &QNetworkReply::error,
this, &MyClass::onError);
connect(m_pNetworkReply, &QNetworkReply::sslErrors,
this, &MyClass::onSslErrors);
}
MyClass::~MyClass()
{
}
void MyClass::replyFinished()
{
disconnect(m_pNetworkReply, &QNetworkReply::finished,
this, &MyClass::replyFinished);
// disconnect(m_pNetworkReply, &QNetworkReply::error,
// this, &MyClass::onError);
disconnect(m_pNetworkReply, &QNetworkReply::sslErrors,
this, &MyClass::onSslErrors);
m_pNetworkReply->deleteLater();
close();
}
void MyClass::onError(QNetworkReply::NetworkError)
{
disconnect(m_pNetworkReply, &QNetworkReply::finished,
this, &MyClass::replyFinished);
// disconnect(m_pNetworkReply, &QNetworkReply::error,
// this, &MyClass::onError);
disconnect(m_pNetworkReply, &QNetworkReply::sslErrors,
this, &MyClass::onSslErrors);
}
void MyClass::onSslErrors(QList<QSslError>)
{
disconnect(m_pNetworkReply, &QNetworkReply::finished,
this, &MyClass::replyFinished);
// disconnect(m_pNetworkReply, &QNetworkReply::error,
// this, &MyClass::onError);
disconnect(m_pNetworkReply, &QNetworkReply::sslErrors,
this, &MyClass::onSslErrors);
}
La seule erreur que je suis ici:
connect(m_pNetworkReply, &QNetworkReply::error,
this, &MyClass::onError);
Fournissez le code de votre classe, s'il vous plaît. – gomons
@gomons fait. le code 'disconnect' commenté donne aussi des erreurs ... –
duplication possible de [Connexion à QNetworkReply :: signal d'erreur] (http://stackoverflow.com/questions/14992668/connecting-to-qnetworkreplyerror-signal) – cmannett85