Bild aus dem Internet anzeigen?

Alles rund um die Programmierung mit Qt
Antworten
blubsy
Beiträge: 11
Registriert: 27. März 2010 19:58

Bild aus dem Internet anzeigen?

Beitrag 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
GSoft
Beiträge: 24
Registriert: 30. Dezember 2008 01:16
Wohnort: NRW

Beitrag 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
Lerne aus den Fehlern Anderer! Du hast nicht die Zeit sie selbst zu machen.
blubsy
Beiträge: 11
Registriert: 27. März 2010 19:58

Beitrag 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 ?
Dateianhänge
Bildschirmfoto.png
Bildschirmfoto.png (1.09 KiB) 8725 mal betrachtet
GSoft
Beiträge: 24
Registriert: 30. Dezember 2008 01:16
Wohnort: NRW

Beitrag von GSoft »

wie gibst du den den Pfad an?
Lerne aus den Fehlern Anderer! Du hast nicht die Zeit sie selbst zu machen.
blubsy
Beiträge: 11
Registriert: 27. März 2010 19:58

Beitrag von blubsy »

GSoft
Beiträge: 24
Registriert: 30. Dezember 2008 01:16
Wohnort: NRW

Beitrag 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
Lerne aus den Fehlern Anderer! Du hast nicht die Zeit sie selbst zu machen.
blubsy
Beiträge: 11
Registriert: 27. März 2010 19:58

Beitrag 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.
GSoft
Beiträge: 24
Registriert: 30. Dezember 2008 01:16
Wohnort: NRW

Beitrag 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
Lerne aus den Fehlern Anderer! Du hast nicht die Zeit sie selbst zu machen.
blubsy
Beiträge: 11
Registriert: 27. März 2010 19:58

Beitrag 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;
}
blubsy
Beiträge: 11
Registriert: 27. März 2010 19:58

Beitrag von blubsy »

kann mit niemand helfen ?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
GSoft
Beiträge: 24
Registriert: 30. Dezember 2008 01:16
Wohnort: NRW

Beitrag 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
Lerne aus den Fehlern Anderer! Du hast nicht die Zeit sie selbst zu machen.
drizzt
Beiträge: 29
Registriert: 9. Oktober 2009 13:37

Beitrag 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)
MiKla
Beiträge: 134
Registriert: 29. Juli 2007 15:29

Beitrag 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"!!!
Antworten