Seite 1 von 1
Bild aus dem Internet anzeigen?
Verfasst: 29. März 2010 12:38
von blubsy
hey,
ich bin noch recht neu in qt.
beschäftige mich jetzt vielleicht 3 Tage damit.
Jetzt wollte ich auf einem Dialog ein Bild aus dem Internet anzeigen.
Gibt es dafür eine spezielle Klasse oder muss ich es erst Downloaden?
hoffe ihr könnt mir helfen...
blubsy
Verfasst: 29. März 2010 12:41
von GSoft
Eine Möglichkeit währe es, ein QLabel zu benutzen und darin mit HTML (<img src="http:deineWebsite.com/DeinBild.png">) das Bild anzeigen zu lassen aber ob das wirklich effektiv ist (kann unter Umständen sehr lange dauern!)
Gruß
GSoft
Verfasst: 29. März 2010 13:18
von blubsy
Danke für die schnelle antwort.
Funktioniert leider nicht.
Wenn ich per setText den img Tag übergebe kommt nur das hier(Anhang), egal welches Bild ich angebe. Mach ich was falsch ?
Verfasst: 29. März 2010 13:28
von GSoft
wie gibst du den den Pfad an?
Verfasst: 29. März 2010 13:39
von blubsy
Verfasst: 29. März 2010 14:03
von GSoft
hey sorry, ich habe schon öfters Bilder in QLabel angezeigt, aber wie ich gerade festgestellt habe, immer nur welche die in der Ressourcen-Datei vorlagen.
Guck dir mal das Beispiel unter dem Index im Qt-Assistant an: HTTP Example
Gruß
GSoft
Verfasst: 29. März 2010 16:28
von blubsy
Hey,
Habe das jetzt das mit QHttp in mein Programm eingebaut.
Bekomme allerdings beim Kompelieren jetzt dieses Fehler:
Code: Alles auswählen
src/WebTest.cpp:23: error: invalid conversion from ‘QHttp*’ to ‘int’
src/WebTest.cpp:23: error: cannot convert ‘const char*’ to ‘const sockaddr*’ for argument ‘2’ to ‘int connect(int, const sockaddr*, socklen_t)’
Es geht um diese Codestelle im Konstruktor:
Code: Alles auswählen
connect(http1, SIGNAL(requestFinished(int, bool)),
this, SLOT(httpRequestFinished(int, bool)));
Habe es eigentlich genau wie in dem Example gemacht nur das das ganze in einer extra Klasse laufen soll,
Ich gebe QHttp dabei über den Konstruktor das parent von der Hauptklasse (da wo das Fenster gesteuert wird) mit.
Code: Alles auswählen
Webtest::Webtest(QObject * parent) {
http1 = new QHttp(parent);
}
Ist das falsch? Wie gesagt bin noch net so wirklich lang in QT.
Verfasst: 29. März 2010 16:32
von GSoft
blubsy hat geschrieben:
Es geht um diese Codestelle im Konstruktor:
Code: Alles auswählen
connect(http1, SIGNAL(requestFinished(int, bool)),
this, SLOT(httpRequestFinished(int, bool)));
Bist du dir sicher das es um diese Zeilen geht? Gib mal den Quelltext des ganzen Konstruktors (besonders die Zeile 23).
Gruß
GSoft
Verfasst: 29. März 2010 16:39
von blubsy
Code: Alles auswählen
Webtest::Webtest(QObject * parent) {
http1 = new QHttp(parent);
std::cout << "Webtest()" << std::endl;
connect(http1, SIGNAL(requestFinished(int, bool)),
this, SLOT(httpRequestFinished(int, bool)));
}
Zeile 23 ist diese: this, SLOT(httpRequestFinished(int, bool)));
Hier mal die ganze Klasse soweit ich sie bis jetzt habe:
Code: Alles auswählen
Webtest::Webtest(QObject * parent) {
http1 = new QHttp(parent);
std::cout << "Webtest()" << std::endl;
connect(http1, SIGNAL(requestFinished(int, bool)),
this, SLOT(httpRequestFinished(int, bool)));
}
Webtest::Webtest(const Webtest& orig) {
}
Webtest::~Webtest() {
std::cout << "~Webtest()" << std::endl;
}
void Webtest::downloadFile(QString pUrl){
QUrl url(pUrl);
QFileInfo fileInfo(url.path());
QString fileName = fileInfo.fileName();
file = new QFile("temp/"+fileName);
if (!file->open(QIODevice::WriteOnly)) {
std::cout << file->errorString().toStdString() << std::endl;
delete file;
file = 0;
return;
}
http1->setHost(url.host(), url.port() != -1 ? url.port() : 80);
httpRequestAborted = false;
httpGetId = http1->get(url.path(), file);
}
void Webtest::httpRequestFinished(int requestId, bool error)
{
if (httpRequestAborted) {
if (file) {
file->close();
file->remove();
delete file;
file = 0;
}
return;
}
if (requestId != httpGetId)
return;
file->close();
if (error) {
file->remove();
std::cout << http1->errorString().toStdString() << std::endl;
} else {
std::cout << ("Downloaded %1 to current directory") << std::endl;
}
delete file;
file = 0;
}
Verfasst: 30. März 2010 10:36
von blubsy
kann mit niemand helfen ?
Verfasst: 30. März 2010 11:20
von Christian81
QHttp und QFtp sind deprecated (siehe Doku) - warum verwendest Du veraltete Klassen?
Und da Du wahrscheinlich irgendwo die Hesderdatei sys/socket.h includiert hast gibt es von dort schon eine Funktion connect(). Du musst aber QObject::connect() aufrufen.
Verfasst: 30. März 2010 13:30
von GSoft
Christian81 hat geschrieben:QHttp und QFtp sind deprecated (siehe Doku) - warum verwendest Du veraltete Klassen?
Seit welcher Version? In der 4.5.2-Doku kann ich davon nichts finden..
Gruß
GSoft
Verfasst: 30. März 2010 13:36
von drizzt
QHttp:
This class is obsolete. It is provided to keep old source code working. We strongly advise against using it in new code.
This class is not part of the Qt GUI Framework Edition.
(Qt 4.6 doku)
Verfasst: 30. März 2010 23:44
von MiKla
Da würde mich mal interessieren, wie ich QFtp ersetzen kann durch QNetworkReplay und QNetworkAssistant ersetzen kann, wie es in der Doku steht.
However, for new applications, it is recommended to use QNetworkAccessManager and QNetworkReply, as those classes possess a simpler, yet more powerful API.
Wo ist das more powerful, bezogen auf Ftp? QFtp ist intuitiv zu benutzen bei den QNetwork* Sachen wird das schon schwieriger. Wenn da jemand ein Beispiel hat, ist das hier herzlich willkommen
Michael
P.S.
Solange das FTP Example auf QFtp aufbaut, glaube ich nicht an "depricated"!!!