82 qsizetype newLineIndex = -1;
84 const char *begin = text.data();
85 while ((newLineIndex = text.indexOf(
'\n', from)) != -1) {
86 const auto bav = QByteArrayView(begin + from, begin + newLineIndex).trimmed();
88 list.push_back(QUrl::fromEncoded(bav));
89 from = newLineIndex + 1;
90 if (from >= text.size())
93 if (from != text.size()) {
94 const auto bav = QByteArrayView(begin + from, text.end()).trimmed();
96 list.push_back(QUrl::fromEncoded(bav));
103 Q_Q(
const QMimeData);
104 int typeId = type.id();
106 QVariant data = q->retrieveData(format, type);
109 if (format ==
"text/plain"_L1 && !data.isValid()) {
110 data = retrieveTypedData(textUriListLiteral(), QMetaType(QMetaType::QVariantList));
111 if (data.metaType().id() == QMetaType::QUrl) {
112 data = QVariant(data.toUrl().toDisplayString());
113 }
else if (data.metaType().id() == QMetaType::QVariantList) {
116 const QList<QVariant> list = data.toList();
117 for (
const auto &element : list) {
118 if (element.metaType().id() == QMetaType::QUrl) {
119 text += element.toUrl().toDisplayString();
126 data = QVariant(text);
130 if (data.metaType() == type || !data.isValid())
136 if ((typeId == QMetaType::QUrl && data.metaType().id() == QMetaType::QVariantList)
137 || (typeId == QMetaType::QVariantList && data.metaType().id() == QMetaType::QUrl))
141 if ((typeId == QMetaType::QPixmap && data.metaType().id() == QMetaType::QImage)
142 || (typeId == QMetaType::QImage && data.metaType().id() == QMetaType::QPixmap))
145 if (data.metaType().id() == QMetaType::QByteArray) {
148 case QMetaType::QString: {
149 const QByteArray ba = data.toByteArray();
152 if (format ==
"text/html"_L1) {
154 if (decoder.isValid()) {
155 return QString(decoder(ba));
159 return QString::fromUtf8(ba);
161 case QMetaType::QColor: {
162 QVariant newData = data;
163 newData.convert(QMetaType(QMetaType::QColor));
166 case QMetaType::QVariantList: {
167 if (format !=
"text/uri-list"_L1)
171 case QMetaType::QUrl: {
172 auto bav = data.view<QByteArrayView>();
176 if (bav.endsWith(
'\0'))
178 return dataToUrls(bav);
184 }
else if (typeId == QMetaType::QByteArray) {
187 switch (data.metaType().id()) {
188 case QMetaType::QByteArray:
189 case QMetaType::QColor:
190 return data.toByteArray();
191 case QMetaType::QString:
192 return data.toString().toUtf8();
193 case QMetaType::QUrl:
194 return data.toUrl().toEncoded();
195 case QMetaType::QVariantList: {
198 const QList<QVariant> list = data.toList();
199 for (
const auto &element : list) {
200 if (element.metaType().id() == QMetaType::QUrl) {
201 result += element.toUrl().toEncoded();
205 if (!result.isEmpty())
328QList<QUrl> QMimeData::urls()
const
330 Q_D(
const QMimeData);
331 QVariant data = d->retrieveTypedData(textUriListLiteral(), QMetaType(QMetaType::QVariantList));
333 if (data.metaType().id() == QMetaType::QUrl)
334 urls.append(data.toUrl());
335 else if (data.metaType().id() == QMetaType::QVariantList) {
336 const QList<QVariant> list = data.toList();
337 for (
const auto &element : list) {
338 if (element.metaType().id() == QMetaType::QUrl)
339 urls.append(element.toUrl());