2016-05-17 13 views
1

So habe ich diesen Code:QNetworkAccessManager sendet kein Signal

QUrl url("http://..."); 
QNetworkRequest request(url); 
QNetworkReply *reply = m_networkManager->get(request); 
connect(reply, SIGNAL(finished()), SLOT(onRequestCompleted())); 
connect(reply,SIGNAL(error(QNetworkReply::NetworkError)),SLOT(onError(QNetworkReply::NetworkError))); 

und ich kann Signal an die anderen Funktionen erzeugt

void IpResolver::onRequestCompleted() 
{ 
QString webContent; 

QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender()); 

if (reply) 
{ 
    if (reply->error() == QNetworkReply::NoError) 
    { 
     QString webContent = reply->readAll(); 
    } 
} 
} 

Ich kann nicht die Lösung herauszufinden, bitte helfen Sie bekommen.

+0

Ihr Thema ist falsch "QNetworkAccessManager nicht funktioniert". Ich habe diese Klasse viele Male benutzt und obwohl es einige Probleme hat, ist es offensichtlich falsch, zu sagen "es funktioniert nicht". Zu sagen "Ich kann mir nicht vorstellen, wie man es richtig benutzt" wäre der Wahrheit näher. –

+0

okay, ich werde es umbenennen – filcitheking

+0

"Kann Signal an die andere Funktion nicht bekommen" Sie meinen, Ihr Steckplatz wird nie aufgerufen? –

Antwort

1

Ich weiß nicht, was genau Sie wollen, aber:

  1. Warum verwenden Sie Zeiger anstelle irgendeiner Art onRequestCompleted(QNetworkReply *reply) antworten?
  2. Wenn Sie das tun so:

    QUrl url("http://..."); 
    QNetworkRequest request(url); 
    connect(m_networkManager, &QNetworkAccessManager::finished, this, &IpResolver::onRequestCompleted); 
    m_networkManager->get(request); 
    
  3. Und Ihre Slot wird, zum Beispiel:

    void IpResolver::onRequestCompleted(QNetworkReply *reply) 
    { 
        QString webContent; 
        if (reply->error() == QNetworkReply::NoError) 
         webContent = reply->readAll(); 
    } 
    
+0

Zuerst vielen Dank für die Hilfe, aber ich habe versucht, Ihre Version und jetzt löst es eine Ausnahme, wenn kompiliert: Ausnahme ausgelöst: Lesezugriffsverletzung. dies-> war 0x555C3A43. Wenn für diese Ausnahme ein Handler vorhanden ist, kann das Programm sicher fortgesetzt werden. – filcitheking

+1

Wo genau fangen Sie eine Ausnahme? Welcher Debug-Modus sagt dir? – someoneinthebox

+0

Hier erhalte ich die Ausnahme: QNetworkReply * QNetworkAccessManager :: get (const QNetworkRequest & Anfrage) { Rückgabe d_func() -> postProcess (createRequest (QNetworkAccessManager :: GetOperation, Anfrage)); } – filcitheking