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