2012-04-04 14 views
1

Ich arbeite an einem Projekt, bei dem ich versuche, eine Anfrage über REST-Anfragen an unseren Webservice zu senden. Zuerst habe ich nur das finished(QNetworkReply*) Signal an einen Steckplatz angeschlossen, aber da es aufgrund von SSL-Problemen nie beendet wurde, versuchte ich auch, den sslErrors(QNetworkReply*, const QList<QSslError>&)-Steckplatz zu verbinden, da die Anforderung https ist.Fehler beim Zugriff auf die Ssl-Fehlerliste von QNetworkAccessManager

connect(&_accessManager, SIGNAL(sslErrors(QNetworkReply*, const QList<QSslError>&)), 
     this, SLOT(printSslErrors(QNetworkReply*, const QList<QSslError>&))); 

Dann kann ich in meiner Druckfunktion auf die Fehlerliste in keiner Weise zugreifen.

void AssetManager::printSslErrors(QNetworkReply *reply, const QList<QSslError>& errors) { 
    ... 
} 

I'v versucht:

const QSslError test = errors.at(0); // error on 'test' 
QSslError test = errors.at(0); // error on 'test' 

oder

foreach(QSslError error, errors) { 
    qDebug() << error.errorString(); // error on 'errors' 
} 
for(int i = 0; i < errors.count(); i++) { 
    qDebug() << errors.at(i).errorString(); // error on 'errors' 
} 

was dazu führt:

error C2079: 'test' uses undefined class 'QSslError'
error C2440: 'initializing' : cannot convert from 'const QSslError' to 'int'

oder

error C2027: use of undefined type 'QSslError'
error C2228: left of '.toString' must have class/struct/union

auch, dass IntelliSense unterstreicht errors oder test mit der Meldung:

IntelliSense: incomplete type is not allowed

(Beachten Sie, dass es funktioniert nicht beschweren, wenn ich errors.count() tun)

I schließen <QSslError> in der Headerdatei ...

Ich habe ziemlich viel mit dem sslError Signal gekämpft und vor ein paar Wochen war ich nicht einmal in der Lage, das Signal mit irgendetwas zu verbinden, da es "nicht existiert". Ich vermisse ich ein Modul oder etwas?

Danke für Ihre Hilfe

Edit:

der Fehler bekommen:

Object::connect: No such signal QNetworkAccessManager::sslErrors(QNetworkReply*, const QList&)

Auch kann nicht überprüfen, ob ich Ssl

qDebug() << QSslSocket::supportsSsl(); 

haben seit QSslSocket noch nicht definiert ist obwohl es enthalten ist. Es muss etwas Wichtiges fehlen, oder? Muss ich etwas installieren? Ich bin komplett hier verloren :(

Antwort

4

Stellen Sie sicher, dass Qt mit SSL-Unterstützung gebaut eingeschaltet ist (und die OpenSSL DLLs auf dem Pfad gefunden werden kann).

Dies ist in der Regel nur dann ein Problem, wenn Sie Qt gebaut selbst (Ich vergesse auch oft diese Konfigurationsoptionen), oder wenn Sie Qt von Linux Distribution verwenden, die es ohne SSL zu bauen (obwohl ich das nie gesehen habe).

EDIT: Wenn Sie es bauen müssen auf Windows (und kann prebuilt binaries aus irgendeinem Grund nicht verwenden):

  • Downloaden und entpacken Sie OpenSSL und Qt in den gleichen Ordner.Zum Beispiel:

    c:\root\openssl-1.0.1

    c:\root\qt-everywhere-opensource-src-4.8.1

  • Starten Sie Visual Studio-Befehlszeile und führen Sie c: \ root \ openssl-1.0.1 \ ms \ 32all.bat, für Dinge warten zu bauen

  • cd in c: \ root \ qt-überall-Open-Source-src-4.8.1 und führen

    configure.exe -platform win32-msvc2010 -openssl -I c:\root\openssl-1.0.1\include

  • stellen Sie sicher, Qt erkannt und aktiviert OpenSSL Unterstützung (konfigurieren druckt die Liste von allem)

  • Lauf Nmake Qt selbst

(ändern passend für andere Versionen von VS)

+0

wissen Sie, wie man es für Windows baut? so viele Führer gesehen und sie sind alle anders ... – chikuba

0

ich nur zu bauen hatte den gleichen Fehler und fragte sich, warum das Signal nicht gültig war. Wie oben erwähnt, ist es in der Tat, da die OpenSSL-Unterstützung nicht aktiviert ist. Siehe QNetworkAccessManager.h: 144: 146:

#ifndef QT_NO_OPENSSL 
    void sslErrors(QNetworkReply *reply, const QList<QSslError> &errors); 
#endif 

das heißt das Signal wird nur erklärt, wenn OpenSSL Unterstützung an Ort und Stelle ist, als Qt kompiliert wurde.

Verwandte Themen