Seite 1 von 1
Mit Qt eine *.json Datei einer Url empfangen ?
Verfasst: Mi Sep 24, 2014 1:45 pm
von Pinguinschal
Hallo,
ich möchte gerne in meinem Programm mittels einer QTableView die Inhalte eines *.json dokuments anzeigen, welches ich zuvor von einem Link bekommen habe. Wenn man diesen Link im Internet eingibt, fragt Firefox einen ob man das Dokument speichern möchte. Ich habe im Internet bisher nur von möglichekeiten gelesen, den Quellcode einer Internetseite zu bekommen, oder die Seite grafisch dar zu stellen. Wie muss ich das benutzen?
Das Beispiel der QT Project Seite hat mich wegen den ganzen Slots nur nochmehr verwirrt. Funktionieren tut es bei mir auch nicht.
Das ist der Code aus dem Beispiel :
Code: Alles auswählen
QNetworkAccessManager *manager = new QNetworkAccessManager(this); <-- Diese beiden Zeilen werden übrigens
connect(manager, SIGNAL(finished(QNetworkReply*)), . sogar als fehler unterstrichen, obwohl ich es
this, SLOT(replyFinished(QNetworkReply*))); . includiert habe.
.
manager->get(QNetworkRequest(QUrl("http://qt.nokia.com"))); <-------------------------------
Fehler dazu sagt übrigens : undefined reference to `QNetworkAccessManager::QNetworkAccessManager(QObject*)
Muss ich überhaupt QNetworkAccessManager benutzen? Ich bin mir dabei noch nicht so sicher. Würde mich über Tipps freuen.
Danke
Re: Mit Qt eine *.json Datei einer Url empfangen ?
Verfasst: Mi Sep 24, 2014 2:24 pm
von Xin
Ich bin kein Qt-Spezialist, aber
Code: Alles auswählen
undefined reference to `QNetworkAccessManager::QNetworkAccessManager(QObject*)
ist eine Linker-Fehlermeldung.
Du musst noch eine Qt-Lib hinzulinken, die die entsprechende Funktion beinhaltet.
Wie hast Du das Projekt erstellt und hast Du Änderungen vorgenommen?
Re: Mit Qt eine *.json Datei einer Url empfangen ?
Verfasst: Mi Sep 24, 2014 3:32 pm
von nufan
Du musst in deine .pro-Datei
einfügen, dann sollte es mal bauen.
Bezüglich JSON: Welche Version von Qt verwendest du?
Re: Mit Qt eine *.json Datei einer Url empfangen ?
Verfasst: Do Sep 25, 2014 7:18 am
von Pinguinschal
Hallo,
danke für die schnelle Antwort.
Ich benutze cmake, habe also eine build datei, wesshalb ich das mit =+ nicht brauche, aber ich hatte tatsächlich vergessen es in der build datei hinzuzufügen. Nun nimmt er es an.
Aber ist das denn der Richtige Weg, QNetworkAccessManager zu benutzen, für das was ich vor habe und ist der Beispielcode dafür richtig oder muss ich etwas anders machen ?
Denn wenn ich
http://google.de eingebe als url, dann gibt es keinen networkerror, aber wenn ich meinen Link eingebe ( der in Firefox funktioniert ) dann gibt es einen Networkerror, weil er vermutlich eine Datei zurück gibt. Was muss ich dafür verändern ?
Re: Mit Qt eine *.json Datei einer Url empfangen ?
Verfasst: Do Sep 25, 2014 8:36 am
von Pinguinschal
Oh, nein, bei
http://google.de wirft es auch einen network error, es dauert nur länger.
Was ist der Fehler in dem Code ?
Code: Alles auswählen
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QObject::connect(manager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(serviceRequestFinished(QNetworkReply*)));
manager->get(QNetworkRequest(QUrl("http://google.de")));
}
void Tester::serviceRequestFinished(QNetworkReply* reply)
{
reply->deleteLater();
if(reply->error() == QNetworkReply::NoError) {
QByteArray data = reply->readAll();
qDebug(data);
qDebug("keinError");
} else {
cout<<"Error in Reply"<<endl;
}
}
Re: Mit Qt eine *.json Datei einer Url empfangen ?
Verfasst: Do Sep 25, 2014 10:12 am
von nufan
Kannst du ein minimales Demo-Projekt zusammenstellen und hochladen?
Re: Mit Qt eine *.json Datei einer Url empfangen ?
Verfasst: Do Sep 25, 2014 12:24 pm
von Pinguinschal
Natürlich.
Also zuerst hatte ich probiert aus einer Datenbank daten dar zu stellen, das ist noch im Programm drinne, weil ich die Daten die ich dann aus der .json Datei auslese, in eine Datenbank speichern will.
Ich hatte den Fehler gefunden, bei google.de hatte ich www. vorher vergessen. Wenn ich es mit Google nun Probiere, funktionert es. Naja, es wirft zumin. keinen Fehler. Jedoch hat die URL die ich benutzen muss, kein www. . Es ist von der AIS Seite und gibt mir Die AIS Daten zurück. In meinem Beispiel wird desshalb mein Benutzername durch ein Beispiel ersetzt. Der Fehler den es Ausgiebt, lautet:
Protocol "" is unknown
Code: Alles auswählen
void Tester::init()
{ QSqlQueryModel *model = new QSqlQueryModel (this);
view = new QTableView(this);
/*
Code für die Verbindung von Qt und Mysql
*/
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QObject::connect(manager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(serviceRequestFinished(QNetworkReply*)));
manager->get(QNetworkRequest(QUrl("data.aishub.net/ws.php?username=AH_BSPC&format=1&output=json&compress=0&latmin=50&latmax=58&lonmin=5&lonmax=10")));
}
void Tester::serviceRequestFinished(QNetworkReply* reply)
{
reply->deleteLater();
if(reply->error() == QNetworkReply::NoError) {
QByteArray data = reply->readAll();
QString Sdata = data.data();
qDebug(data);
qDebug("keinError");
} else {
cout<<"Error in Reply"<<endl;
QByteArray data = reply->readAll();
QString errors;
errors = (reply->errorString());
string utf8_text = errors.toUtf8().constData();
cout<<utf8_text<<endl;
}
}
Re: Mit Qt eine *.json Datei einer Url empfangen ?
Verfasst: Do Sep 25, 2014 12:43 pm
von nufan
Mit Demo-Projekt meinte ich etwas das man kompilieren und ausführen kann.
Pinguinschal hat geschrieben:Protocol "" is unknown
Versuch mal in der URL "http://" bzw. "https://" davor zu schreiben.
Re: Mit Qt eine *.json Datei einer Url empfangen ?
Verfasst: Do Sep 25, 2014 1:07 pm
von Pinguinschal
Mit http:// / https:// kommt wieder " host not found. Könnte daran liegen das ich hier n Proxy & n DNS habe. Wenn ich es mit einem der Beiden bei Firefox eingebe, kommt der Fehler : " Network Error (dns_unresolved_hostname)
Your requested host "
www.data.aishub.net" could not be resolved by DNS. "
Tester.h
Code: Alles auswählen
#include <QtGui/QTableWidget>
#include <QtSql/QSqlQueryModel>
#include <QtNetwork/QNetworkReply>
#ifndef TESTER_H_
#define TESTER_H_
class Tester : public QTableView
{
Q_OBJECT
public:
Tester();
virtual ~Tester();
void init();
bool returnvalue;
QTableWidget table;
QTableView *view;
public slots:
void serviceRequestFinished(QNetworkReply* reply);
};
#endif /* TESTER_H_ */
Tester.cpp main
Code: Alles auswählen
using namespace std;
int main(int argc, char **argv)
{
QApplication app (argc, argv);
Tester tester;
tester.init();
tester.show();
return app.exec();
}
Tester init
Code: Alles auswählen
void Tester::init()
{
view = new QTableView(this);
this->setGeometry(500,500,400,350);
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
QObject::connect(manager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(serviceRequestFinished(QNetworkReply*)));
// Nur Beispiel username
manager->get(QNetworkRequest(QUrl("data.aishub.net/ws.php?username=BSP&format=1&output=json& compress=0&latmin=50&latmax=58&lonmin=5&lonmax=10")));
}
void Tester::serviceRequestFinished(QNetworkReply* reply)
{
reply->deleteLater();
if(reply->error() == QNetworkReply::NoError) {
QByteArray data = reply->readAll();
QString Sdata = data.data();
qDebug(data);
qDebug("keinError");
} else {
cout<<"Error in Reply"<<endl;
QByteArray data = reply->readAll();
QString errors;
errors = (reply->errorString());
string utf8_text = errors.toUtf8().constData();
cout<<utf8_text<<endl;
}
}
Re: Mit Qt eine *.json Datei einer Url empfangen ?
Verfasst: Do Sep 25, 2014 1:33 pm
von nufan
Naja kompilierbar ist das so leider nicht, auch die qmake-Datei fehlt.
Pinguinschal hat geschrieben:Mit http:// / https:// kommt wieder " host not found. Könnte daran liegen das ich hier n Proxy & n DNS habe. Wenn ich es mit einem der Beiden bei Firefox eingebe, kommt der Fehler : " Network Error (dns_unresolved_hostname)
Bei mir funktioniert das mit http://. Ich bekomme zwar eine Fehlermeldung innerhalb der JSON-Datei (wegen ungültiger Zugangsdaten) aber prinzipiell erreiche ich die Datei.