2013-02-21 8 views
7

Ich verwende die neue Verbindungssyntax für Qt5. QNetworkReply hat ein Signal namens error und auch eine Funktion namens error. Dies führt zu Problemen, wenn auf das Signal zu versuchen, eine Verbindung:Verbinden mit QNetworkReply :: Fehlersignal

connect(reply, &QNetworkReply::error, this, &MyClass::error); 

Fehler C2664: ‚QMetaObject :: Verbindungs ​​QObject :: (const QObject * verbinden, const char *, const QObject *, const char *, Qt :: Connection): überlastet-Funktion ‚auf‚const char *‘kann nicht Parameter 2 aus konvertieren‘‘ Kontext nicht für Begriffsklärung von überladenen Funktion erlaubt

Wie kann ich feststellen, den Compiler (MSVC), die ich will Verbindung zum Signal statt zur Funktion herstellen?

+0

Mögliche Duplikat [Anschluss überlastet Signale und Slots in Qt 5] (http://stackoverflow.com/questions/16794695/connecting-overloaded-signals-and- slots-in-qt-5) –

Antwort

13

Sie müssen manuell die Funktionszeiger werfen die korrekte Funktion zu adressieren:

connect(reply, static_cast<void (QNetworkReply::*)(QNetworkReply::NetworkError)>(&QNetworkReply::error), this, &MyClass::error); 

Dies ist die noted Folge der Verwendung von neuer Syntax für überladene Funktionen:

Nachteile:

Sehr komplizierte Syntax bei Überlastungen?

P.S. Sie können ähnliches Beispiel auf den obigen Link finden:

QObject::connect(socket, static_cast<void (QTcpSocket::*)(QAbstractSocket::SocketError)>(&QAbstractSocket::error), [socket] (QAbstractSocket::SocketError) { 
     qDebug()<< "ERROR " << socket->errorString(); 
     socket->deleteLater(); 
    });