summaryrefslogtreecommitdiffstats
path: root/examples/xml
diff options
context:
space:
mode:
authorØystein Heskestad <oystein.heskestad@qt.io>2023-03-03 17:41:43 +0100
committerØystein Heskestad <oystein.heskestad@qt.io>2023-03-21 14:49:09 +0100
commit10b4c06b4928d12addc7e55e4a6e5ed537a63942 (patch)
tree33f521c8fd692bf63618156aabb14dcb6009771c /examples/xml
parent3c521e1fb42885e070bf07f36349a1e8cdb39e76 (diff)
Move rsslisting example into corelibe/serialization
The implementation of the stream-based XML parser resides in coreslib/serialization. Moving the rsslisting example there. Task-number: QTBUG-110647 Pick-to: 6.5 Change-Id: I862909e767301250750b6ee0d8ac7e20d6bad2b1 Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Diffstat (limited to 'examples/xml')
-rw-r--r--examples/xml/CMakeLists.txt3
-rw-r--r--examples/xml/rsslisting/CMakeLists.txt38
-rw-r--r--examples/xml/rsslisting/main.cpp26
-rw-r--r--examples/xml/rsslisting/rsslisting.cpp211
-rw-r--r--examples/xml/rsslisting/rsslisting.h55
-rw-r--r--examples/xml/rsslisting/rsslisting.pro8
-rw-r--r--examples/xml/xml.pro3
7 files changed, 0 insertions, 344 deletions
diff --git a/examples/xml/CMakeLists.txt b/examples/xml/CMakeLists.txt
index 6864435951..d97185f647 100644
--- a/examples/xml/CMakeLists.txt
+++ b/examples/xml/CMakeLists.txt
@@ -5,6 +5,3 @@ if(TARGET Qt6::Widgets)
qt_internal_add_example(dombookmarks)
qt_internal_add_example(streambookmarks)
endif()
-if(TARGET Qt6::Network AND TARGET Qt6::Widgets)
- qt_internal_add_example(rsslisting)
-endif()
diff --git a/examples/xml/rsslisting/CMakeLists.txt b/examples/xml/rsslisting/CMakeLists.txt
deleted file mode 100644
index d03979de82..0000000000
--- a/examples/xml/rsslisting/CMakeLists.txt
+++ /dev/null
@@ -1,38 +0,0 @@
-# Copyright (C) 2022 The Qt Company Ltd.
-# SPDX-License-Identifier: BSD-3-Clause
-
-cmake_minimum_required(VERSION 3.16)
-project(rsslisting LANGUAGES CXX)
-
-if(NOT DEFINED INSTALL_EXAMPLESDIR)
- set(INSTALL_EXAMPLESDIR "examples")
-endif()
-
-set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/xml/rsslisting")
-
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Network Widgets)
-
-qt_standard_project_setup()
-
-qt_add_executable(rsslisting
- main.cpp
- rsslisting.cpp rsslisting.h
-)
-
-set_target_properties(rsslisting PROPERTIES
- WIN32_EXECUTABLE TRUE
- MACOSX_BUNDLE TRUE
-)
-
-target_link_libraries(rsslisting PRIVATE
- Qt6::Core
- Qt6::Gui
- Qt6::Network
- Qt6::Widgets
-)
-
-install(TARGETS rsslisting
- RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
- BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
- LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
-)
diff --git a/examples/xml/rsslisting/main.cpp b/examples/xml/rsslisting/main.cpp
deleted file mode 100644
index 9337e5f352..0000000000
--- a/examples/xml/rsslisting/main.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-/*
-main.cpp
-
-Provides the main function for the RSS news reader example.
-*/
-
-#include <QtWidgets>
-
-#include "rsslisting.h"
-
-/*!
- Create an application and a main widget. Open the main widget for
- user input, and exit with an appropriate return value when it is
- closed.
-*/
-
-int main(int argc, char **argv)
-{
- QApplication app(argc, argv);
- RSSListing *rsslisting = new RSSListing;
- rsslisting->show();
- return app.exec();
-}
diff --git a/examples/xml/rsslisting/rsslisting.cpp b/examples/xml/rsslisting/rsslisting.cpp
deleted file mode 100644
index 9269be4080..0000000000
--- a/examples/xml/rsslisting/rsslisting.cpp
+++ /dev/null
@@ -1,211 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-/*
-rsslisting.cpp
-
-Provides a widget for displaying news items from RDF news sources.
-RDF is an XML-based format for storing items of information (see
-http://www.w3.org/RDF/ for details).
-
-The widget itself provides a simple user interface for specifying
-the URL of a news source, and controlling the downloading of news.
-
-The widget downloads and parses the XML asynchronously, feeding the
-data to an XML reader in pieces. This allows the user to interrupt
-its operation, and also allows very large data sources to be read.
-*/
-
-
-#include <QtCore>
-#include <QtWidgets>
-#include <QtNetwork>
-
-#include "rsslisting.h"
-
-
-/*
- Constructs an RSSListing widget with a simple user interface, and sets
- up the XML reader to use a custom handler class.
-
- The user interface consists of a line edit, a push button, and a
- list view widget. The line edit is used for entering the URLs of news
- sources; the push button starts the process of reading the
- news.
-*/
-
-RSSListing::RSSListing(QWidget *parent)
- : QWidget(parent), currentReply(0)
-{
-
- lineEdit = new QLineEdit(this);
- lineEdit->setText("http://blog.qt.io/feed/");
-
- fetchButton = new QPushButton(tr("Fetch"), this);
-
- treeWidget = new QTreeWidget(this);
- connect(treeWidget, &QTreeWidget::itemActivated,
- this, &RSSListing::itemActivated);
- QStringList headerLabels;
- headerLabels << tr("Title") << tr("Link");
- treeWidget->setHeaderLabels(headerLabels);
- treeWidget->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
-
- connect(&manager, &QNetworkAccessManager::finished,
- this, &RSSListing::finished);
-
- connect(lineEdit, &QLineEdit::returnPressed, this, &RSSListing::fetch);
- connect(fetchButton, &QPushButton::clicked, this, &RSSListing::fetch);
-
- QVBoxLayout *layout = new QVBoxLayout(this);
-
- QHBoxLayout *hboxLayout = new QHBoxLayout;
-
- hboxLayout->addWidget(lineEdit);
- hboxLayout->addWidget(fetchButton);
-
- layout->addLayout(hboxLayout);
- layout->addWidget(treeWidget);
-
- setWindowTitle(tr("RSS listing example"));
- resize(640,480);
-}
-
-/*
- Starts the network request and connects the needed signals
-*/
-void RSSListing::get(const QUrl &url)
-{
- QNetworkRequest request(url);
- if (currentReply) {
- currentReply->disconnect(this);
- currentReply->deleteLater();
- }
- currentReply = manager.get(request);
- connect(currentReply, &QNetworkReply::readyRead, this, &RSSListing::readyRead);
- connect(currentReply, &QNetworkReply::metaDataChanged, this, &RSSListing::metaDataChanged);
- connect(currentReply, &QNetworkReply::errorOccurred, this, &RSSListing::error);
-}
-
-/*
- Starts fetching data from a news source specified in the line
- edit widget.
-
- The line edit is made read only to prevent the user from modifying its
- contents during the fetch; this is only for cosmetic purposes.
- The fetch button is disabled, the list view is cleared, and we
- define the last list view item to be 0, meaning that there are no
- existing items in the list.
-
- A URL is created with the raw contents of the line edit and
- a get is initiated.
-*/
-
-void RSSListing::fetch()
-{
- lineEdit->setReadOnly(true);
- fetchButton->setEnabled(false);
- treeWidget->clear();
-
- xml.clear();
-
- QUrl url(lineEdit->text());
- get(url);
-}
-
-void RSSListing::metaDataChanged()
-{
- QUrl redirectionTarget = currentReply->attribute(QNetworkRequest::RedirectionTargetAttribute).toUrl();
- if (redirectionTarget.isValid()) {
- get(redirectionTarget);
- }
-}
-
-/*
- Reads data received from the RDF source.
-
- We read all the available data, and pass it to the XML
- stream reader. Then we call the XML parsing function.
-*/
-
-void RSSListing::readyRead()
-{
- int statusCode = currentReply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
- if (statusCode >= 200 && statusCode < 300) {
- QByteArray data = currentReply->readAll();
- xml.addData(data);
- parseXml();
- }
-}
-
-/*
- Finishes processing an HTTP request.
-
- The default behavior is to keep the text edit read only.
-
- If an error has occurred, the user interface is made available
- to the user for further input, allowing a new fetch to be
- started.
-
- If the HTTP get request has finished, we make the
- user interface available to the user for further input.
-*/
-
-void RSSListing::finished(QNetworkReply *reply)
-{
- Q_UNUSED(reply);
- lineEdit->setReadOnly(false);
- fetchButton->setEnabled(true);
-}
-
-
-/*
- Parses the XML data and creates treeWidget items accordingly.
-*/
-void RSSListing::parseXml()
-{
- while (!xml.atEnd()) {
- xml.readNext();
- if (xml.isStartElement()) {
- if (xml.name() == u"item")
- linkString = xml.attributes().value("rss:about").toString();
- currentTag = xml.name().toString();
- } else if (xml.isEndElement()) {
- if (xml.name() == u"item") {
-
- QTreeWidgetItem *item = new QTreeWidgetItem;
- item->setText(0, titleString);
- item->setText(1, linkString);
- treeWidget->addTopLevelItem(item);
-
- titleString.clear();
- linkString.clear();
- }
-
- } else if (xml.isCharacters() && !xml.isWhitespace()) {
- if (currentTag == "title")
- titleString += xml.text();
- else if (currentTag == "link")
- linkString += xml.text();
- }
- }
- if (xml.error() && xml.error() != QXmlStreamReader::PrematureEndOfDocumentError) {
- qWarning() << "XML ERROR:" << xml.lineNumber() << ": " << xml.errorString();
- }
-}
-
-/*
- Open the link in the browser
-*/
-void RSSListing::itemActivated(QTreeWidgetItem * item)
-{
- QDesktopServices::openUrl(QUrl(item->text(1)));
-}
-
-void RSSListing::error(QNetworkReply::NetworkError)
-{
- qWarning("error retrieving RSS feed");
- currentReply->disconnect(this);
- currentReply->deleteLater();
- currentReply = 0;
-}
diff --git a/examples/xml/rsslisting/rsslisting.h b/examples/xml/rsslisting/rsslisting.h
deleted file mode 100644
index 81c655f677..0000000000
--- a/examples/xml/rsslisting/rsslisting.h
+++ /dev/null
@@ -1,55 +0,0 @@
-// Copyright (C) 2016 The Qt Company Ltd.
-// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
-
-#ifndef RSSLISTING_H
-#define RSSLISTING_H
-
-#include <QNetworkAccessManager>
-#include <QNetworkReply>
-#include <QWidget>
-#include <QBuffer>
-#include <QXmlStreamReader>
-#include <QUrl>
-
-
-QT_BEGIN_NAMESPACE
-class QLineEdit;
-class QTreeWidget;
-class QTreeWidgetItem;
-class QPushButton;
-QT_END_NAMESPACE
-
-class RSSListing : public QWidget
-{
- Q_OBJECT
-public:
- RSSListing(QWidget *widget = nullptr);
-
-public slots:
- void fetch();
- void finished(QNetworkReply *reply);
- void readyRead();
- void metaDataChanged();
- void itemActivated(QTreeWidgetItem * item);
- void error(QNetworkReply::NetworkError);
-
-private:
- void parseXml();
- void get(const QUrl &url);
-
- QXmlStreamReader xml;
- QString currentTag;
- QString linkString;
- QString titleString;
-
- QNetworkAccessManager manager;
- QNetworkReply *currentReply;
-
- QLineEdit *lineEdit;
- QTreeWidget *treeWidget;
- QPushButton *fetchButton;
-
-};
-
-#endif
-
diff --git a/examples/xml/rsslisting/rsslisting.pro b/examples/xml/rsslisting/rsslisting.pro
deleted file mode 100644
index c84347c15e..0000000000
--- a/examples/xml/rsslisting/rsslisting.pro
+++ /dev/null
@@ -1,8 +0,0 @@
-HEADERS += rsslisting.h
-SOURCES += main.cpp rsslisting.cpp
-QT += network widgets
-requires(qtConfig(treewidget))
-
-# install
-target.path = $$[QT_INSTALL_EXAMPLES]/xml/rsslisting
-INSTALLS += target
diff --git a/examples/xml/xml.pro b/examples/xml/xml.pro
index 4a2caa1648..991d5a69d2 100644
--- a/examples/xml/xml.pro
+++ b/examples/xml/xml.pro
@@ -3,7 +3,4 @@ TEMPLATE = subdirs
qtHaveModule(widgets) {
SUBDIRS += dombookmarks \
streambookmarks
-
- qtHaveModule(network): SUBDIRS += \
- rsslisting
}