64 Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
65 Q_PROPERTY(QString elementName READ elementName WRITE setElementName NOTIFY elementNameChanged)
66 Q_PROPERTY(QString attributeName READ attributeName WRITE setAttributeName NOTIFY
68 QML_NAMED_ELEMENT(XmlListModelRole)
71 QQmlXmlListModelRole() =
default;
72 ~QQmlXmlListModelRole() =
default;
75 void setName(
const QString &name);
76 QString elementName()
const;
77 void setElementName(
const QString &name);
78 QString attributeName()
const;
79 void setAttributeName(
const QString &attributeName);
84 void elementNameChanged();
85 void attributeNameChanged();
89 QString m_elementName;
90 QString m_attributeName;
96 public QQmlParserStatus
99 Q_INTERFACES(QQmlParserStatus)
101 Q_PROPERTY(Status status READ status NOTIFY statusChanged)
102 Q_PROPERTY(qreal progress READ progress NOTIFY progressChanged)
103 Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged)
104 Q_PROPERTY(QString query READ query WRITE setQuery NOTIFY queryChanged)
105 Q_PROPERTY(QQmlListProperty<QQmlXmlListModelRole> roles READ roleObjects)
106 Q_PROPERTY(
int count READ count NOTIFY countChanged)
107 QML_NAMED_ELEMENT(XmlListModel)
108 Q_CLASSINFO(
"DefaultProperty",
"roles")
111 QQmlXmlListModel(QObject *parent =
nullptr);
114 QModelIndex index(
int row,
int column,
const QModelIndex &parent)
const override;
115 int rowCount(
const QModelIndex &parent)
const override;
116 QVariant data(
const QModelIndex &index,
int role)
const override;
117 QHash<
int, QByteArray> roleNames()
const override;
122 void setSource(
const QUrl &);
124 QString query()
const;
125 void setQuery(
const QString &);
127 QQmlListProperty<QQmlXmlListModelRole> roleObjects();
129 void appendRole(QQmlXmlListModelRole *);
132 enum Status { Null, Ready, Loading, Error };
134 Status status()
const;
135 qreal progress()
const;
137 Q_INVOKABLE QString errorString()
const;
139 void classBegin() override;
140 void componentComplete() override;
143 void statusChanged(QQmlXmlListModel::Status);
144 void progressChanged(qreal progress);
146 void sourceChanged();
153#if QT_CONFIG(qml_network)
154 void requestFinished();
156 void requestProgress(qint64, qint64);
158 void queryCompleted(
const QQmlXmlListModelQueryResult &);
159 void queryError(
void *object,
const QString &error);
162 Q_DISABLE_COPY(QQmlXmlListModel)
164 void notifyQueryStarted(
bool remoteSource);
166 static void appendRole(QQmlListProperty<QQmlXmlListModelRole> *, QQmlXmlListModelRole *);
167 static void clearRole(QQmlListProperty<QQmlXmlListModelRole> *);
169 void tryExecuteQuery(
const QByteArray &data);
171 QQmlXmlListModelQueryJob createJob(
const QByteArray &data);
174#if QT_CONFIG(qml_network)
177 QNetworkReply *m_reply =
nullptr;
183 QStringList m_roleNames;
185 QList<QQmlXmlListModelRole *> m_roleObjects;
186 QList<QFlatMap<
int, QString>> m_data;
187 bool m_isComponentComplete =
true;
188 Status m_status = QQmlXmlListModel::Null;
189 QString m_errorString;
190 qreal m_progress = 0;
192 int m_nextQueryIdGenerator = -1;
193 int m_highestRole = Qt::UserRole;
194 using ResultFutureWatcher = QFutureWatcher<QQmlXmlListModelQueryResult>;
195 QFlatMap<
int, ResultFutureWatcher *> m_watchers;