2013-02-21 15 views
7

Używam nowej składni connect dla Qt5. QNetworkReply ma sygnał o nazwie error, a także funkcję o nazwie error. Powoduje to problemy, gdy próbuje się połączyć z sygnałem:Podłączanie do QNetworkReply :: error signal

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

błędu C2664: „QMetaObject :: Połączenie QObject :: connect (const QObject *, const char *, const QObject *, const char *, Qt :: ConnectionType)”: nie można konwertować parametru 2 z«przeciążonej funkcją»do«const char *» kontekst nie pozwala na dezambiguacji przeciążonych funkcji

Jak mogę poinformować kompilator (MSVC), że chcę połączyć się z sygnałem, a nie z funkcją?

+0

Możliwy duplikat [Connecting przeciążone sygnały i sloty w Qt 5] (http://stackoverflow.com/questions/16794695/connecting-overloaded-signals-and- sloty-w-qt-5) –

Odpowiedz

13

trzeba ręcznie oddanych wskaźnik funkcji zająć prawidłową funkcję:

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

Jest to noted konsekwencją stosowania nowej składni dla przeciążonych funkcji:

minusy:

Bardzo skomplikowana składnia w przypadku przeciążenia?

P.S. Można znaleźć podobny przykład na powyższym linku:

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