Ich schreibe gerade ein kleines Podcast-Programm und ja, gleich beim Quellcode werden warscheinlich einige RSS-Feed-Kenner
die Kriese kriegen ... versucht es zu überleben .
Mein Problem liegt in der Klasse mit denen ich die Feed-Informationen lade (im mom nur Url und Name).
Wenn ich von dieser Klasse (FeedLoader) direkt in der Main-Funktion ein Objekt erstelle funktioniert alles super.
Also so:
Code: Alles auswählen
#include <QApplication>
#include "FeedLoader.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
FeedLoader my("http://www.dradio.de/rss/podcast/sendungen/einewelt/?mode=text");
return app.exec();
}
funktioniert in diesem Objekt das Signal-Slot-Konzept offenbar nicht (jedoch wird mit keine Fehlermeldung angezeigt).
Hier die Klasse:
Code: Alles auswählen
#ifndef FEEDLOADER_H
#define FEEDLOADER_H
#include <QWidget>
#include <QString>
#include <QNetworkAccessManager>
#include <QNetworkReply>
class FeedLoader : public QWidget
{
Q_OBJECT
public:
FeedLoader(QString, QWidget *parent = 0);
private:
QUrl url;
void loadPage();
QString findElement(QString, QString);
private slots:
void requestFinished(QNetworkReply* reply);
void parseSite(QString);
signals:
void connectionError();
void received(QString);
void feed(QString, QMap<QString, QString>);
};
#endif
Code: Alles auswählen
#include "FeedLoader.h"
#include <QDebug>
FeedLoader::FeedLoader(QString urltemp, QWidget *parent) : QWidget(parent)
{
url = QUrl(urltemp);
connect(this, SIGNAL(received(QString)), this, SLOT(parseSite(QString)));
loadPage();
}
void FeedLoader::loadPage()
{
QNetworkAccessManager *networkManager = new QNetworkAccessManager(this);
connect(networkManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(requestFinished(QNetworkReply*)));
networkManager->get(QNetworkRequest(url));
qDebug() << "FeedLoader:loadPage";
}
void FeedLoader::requestFinished(QNetworkReply* reply)
{
qDebug() << "FeedLoader:requestFinished";
if (reply->error() != QNetworkReply::NoError)
emit connectionError();
else
emit received(QString::fromUtf8(reply->readAll()));
}
void FeedLoader::parseSite(QString content)
{
qDebug() << "FeedLoader:parseSite";
QStringList items = content.split("<item>");
QMap<QString, QString> datas;
QString title = findElement("title", items[0]);
// qDebug() << "TITLE: " << title << endl << endl;
for(int i=1; i<items.length(); i++)
{
QString temp = items[i].split("<enclosure url=\"")[1];
QString tmpUrl;
int j = 0;
while(temp[j]!='"')
{
tmpUrl+=temp[j];
j++;
}
// qDebug() << findElement("title", items[i]);
// qDebug() << tmpUrl << endl;
datas[findElement("title", items[i])] = tmpUrl;
}
emit feed(title, datas);
}
QString FeedLoader::findElement(QString name, QString text)
{
if(!name.contains(name))
return "error";
return text.split("<"+name+">")[1].split("</"+name+">")[0];
}
Wenn jemand eine Idee hat oder sogar die Lösung ... schon mal danke.
Bye.