Seite 1 von 1

QNetworkAccessManager - Absturz

Verfasst: 17. März 2010 20:14
von acdc
Hallo,

Ich habe ein kurzes Testprogramm zu QNetworkAccessManager.
Es soll nach der eingabe der URL eine Datei auf die Festplatte speichern und wenn nötig soll auch ein Benutzername und ein Passwort eingegeben werden.

Es funktioniert alles sehr gut, nur wenn ich das Programm beende stürzt es immer ab, hat jemand einen tipp?

Code: Alles auswählen

/* 
 * File:   window.cpp
 * Author: admin
 * 
 * Created on 17. März 2010, 19:33
 */

#include "window.h"

window::window(QWidget *parent) : QMainWindow(parent)
{
  bool ok;
  QString text=QInputDialog::getText(this,tr("Eingabe"),tr("URL:"),QLineEdit::Normal,"http://",&ok);
  if(!text.isEmpty())
  {
    manager=new QNetworkAccessManager(this);

    connect(manager, SIGNAL(finished(QNetworkReply*)),this, SLOT(replyFinished(QNetworkReply*)));
    connect(manager, SIGNAL(authenticationRequired(QNetworkReply *,QAuthenticator *)),this, SLOT(authentication(QNetworkReply *,QAuthenticator *)));

    manager->get(QNetworkRequest(QUrl(text)));
  }

}

void window::replyFinished(QNetworkReply* reply)
{
  QUrl url = reply->url();
  if (reply->error())
  {
    QMessageBox msgBox;
    msgBox.setText(trUtf8("Download fehlgeschlagen. URL: ")+url.toEncoded().constData()+"\n"+reply->errorString());
    msgBox.exec();
  }
  else
  {
    QFile f("out.gif");
    if (!f.open(QIODevice::WriteOnly))
    {
      QMessageBox msgBox;
      msgBox.setText(trUtf8("Datei kann nicht geöffnet werden. \n Error: ")+f.errorString());
      msgBox.exec();
    }
    else
    {
      f.write(reply->readAll());
      f.close();
    }
  }
  QMessageBox msgBox;
  msgBox.setText("Download fertig");
  msgBox.exec();
}
void window::authentication(QNetworkReply *reply,QAuthenticator *authenticator)
{
  bool ok;
  QString user=QInputDialog::getText(this,tr("Authentifizierung"),tr("Benutzername:"),QLineEdit::Password,"",&ok);
  if(!user.isEmpty())
  {
    authenticator->setUser(user);
    QString pass=QInputDialog::getText(this,tr("Authentifizierung"),tr("Passwort:"),QLineEdit::Password,"",&ok);
    if(!user.isEmpty())
    {
      authenticator->setPassword(pass);
    }
  }
}

window::~window()
{

}


Verfasst: 18. März 2010 18:41
von acdc
kann es daran liegen, dass ich das Programm einfach zu früh beende und nicht lange genug auf den Download warte?

mfg acdc

Verfasst: 18. März 2010 19:26
von upsala
Und was meint dein Debugger dazu?

Verfasst: 19. März 2010 08:17
von pfid
Auf jeden Fall solltest du das Reply-Objekt per deleteLater() löschen (siehe Doku).