RSS-Feeds automatisch aktualisieren
-
Hallo,
ich hätte da mal eine generelle Frage zum technisch/logischen Ablauf zu den RSS-Feeds.Ich hab mit in eine C++ - Anwendung auf ein Widget ein qml-File gelegt. Diese qml-File liest mir
RSS-Feeds ein und zeigt diese auch wunderbar an. Hier mal der Code dazu:QQuickView *view = new QQuickView();
view->setResizeMode(QQuickView::SizeRootObjectToView);
QWidget *container = QWidget::createWindowContainer(view, ui->rssWidget);view->setSource(QUrl::fromLocalFile("RssInfo.qml")); QObject *item = view->rootObject(); connect(item, SIGNAL(sendQmlLink(QString)), SLOT(cppQmlLinkSlot(QString))); ui->rssWidget->layout()->addWidget(container);
Nun möchte ich z.B. alle 5 Minuten die Seiten aktuell laden.
- Mache ich das im qml-File und wenn ja wie?
- Starte ich im C++-File einen "Loop" der mir den erzeugten Container löscht und neu erstellt?
Danke um Vorraus.
-
@MarkusWiLinux said in RSS-Feeds automatisch aktualisieren:
RssInfo.qml
das kommt drauf an, wie kommen die Infos ursprünglich in die RssInfo.qml ?
-
Rectangle {
id: windowwidth: 800 height: 1000 // width: parent.width - 1 // height: parent.height - 1 property string currentFeed: rssFeeds.get(0).feed property bool loading: feedModel.status === XmlListModel.Loading property bool isPortrait: Screen.primaryOrientation === Qt.PortraitOrientation signal sendQmlLink(string xLink) onLoadingChanged: { if (feedModel.status == XmlListModel.Ready) list.positionViewAtBeginning() } RssFeeds { id: rssFeeds } XmlListModel { id: feedModel source: "http://" + window.currentFeed //query: "/rss/channel/item" query: "/rss/channel/item[child::media:content]" namespaceDeclarations: "declare namespace media = 'http://search.yahoo.com/mrss/';" XmlRole { name: "title" query: "title/string()" } // Remove any links from the description XmlRole { name: "description" query: "fn:replace(description/string(), '\<a href=.*\/a\>', '')" } XmlRole { name: "image" query: "media:content/@url/string()" } XmlRole { name: "link" query: "link/string()" } XmlRole { name: "pubDate" query: "pubDate/string()" } } ListView { id: categories property int itemWidth: 190 width: isPortrait ? parent.width : itemWidth height: isPortrait ? itemWidth : parent.height orientation: isPortrait ? ListView.Horizontal : ListView.Vertical anchors.top: parent.top model: rssFeeds delegate: CategoryDelegate { itemSize: categories.itemWidth } spacing: 3 } ScrollBar { id: listScrollBar orientation: isPortrait ? Qt.Horizontal : Qt.Vertical height: isPortrait ? 8 : categories.height width: isPortrait ? categories.width : 8 scrollArea: categories anchors.right: categories.right } ListView { id: list anchors.left: isPortrait ? window.left : categories.right anchors.right: closeButton.left anchors.top: isPortrait ? categories.bottom : window.top anchors.bottom: window.bottom anchors.leftMargin: 30 anchors.rightMargin: 4 clip: isPortrait model: feedModel footer: footerText delegate: NewsDelegate {} } ScrollBar { scrollArea: list width: 10 anchors.right: window.right anchors.top: isPortrait ? categories.bottom : window.top anchors.bottom: window.bottom } Component { id: footerText Rectangle { width: parent.width height: closeButton.height color: "lightgray" Text { text: "RSS Feed von Apotheke ADHOC" anchors.centerIn: parent font.pixelSize: 14 } } } Image { id: closeButton source: "images/btn_close.png" scale: 0.8 anchors.top: parent.top anchors.right: parent.right anchors.margins: 4 opacity: (isPortrait && categories.moving) ? 0.2 : 1.0 Behavior on opacity { NumberAnimation { duration: 300 easing.type: Easing.OutSine } } MouseArea { anchors.fill: parent onClicked: { Qt.quit() } } }
}
-
@MarkusWiLinux
Nützt dir der Code was? -
@MarkusWiLinux das kommt drauf an 😉
is RssFeed
das File von diesem Beispiel?
https://doc.qt.io/qt-5/qtdoc-demos-rssnews-example.html -
@J-Hilk Genau :-)
Ich hab's mir etwas angepasst. -
ich hab mit dem Beispiel leider noch nicht wirklich gerarbeitet, aber vom drüber gucken würde ich sagen, du Updates den news feed, indem du einen reload der links erzwingst.
Das tust du, indem du in dem Beispiel zumindest,rssFeeds.get(0).feed
alsocurrentFeed
änderst, z.b. setzt es zu rssFeeds.get(1).feed und anschließend wieder zurück auf rssFeeds.get(0).feedstellt sich heraus, listmodel hat ne reload Funktion
feedModel.reload()
die kannst ,du einfach aufrufen 🤷♂️ -
@J-Hilk Danke. Ich probiers mal aus.
4/8