QNetworkAccessManager - Absturz

Alles rund um die Programmierung mit Qt
Antworten
acdc
Beiträge: 82
Registriert: 23. Oktober 2007 18:56

QNetworkAccessManager - Absturz

Beitrag 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()
{

}

acdc
Beiträge: 82
Registriert: 23. Oktober 2007 18:56

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Und was meint dein Debugger dazu?
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Auf jeden Fall solltest du das Reply-Objekt per deleteLater() löschen (siehe Doku).
Antworten