120void QQuickDropArea::setKeys(
const QStringList &keys)
123 if (d->keys != keys) {
126 if (keys.isEmpty()) {
127 d->keyRegExp = QRegularExpression();
129 QString pattern = QLatin1Char(
'(') + QRegularExpression::escape(keys.first());
130 for (
int i = 1; i < keys.size(); ++i)
131 pattern += QLatin1Char(
'|') + QRegularExpression::escape(keys.at(i));
132 pattern += QLatin1Char(
')');
133 d->keyRegExp = QRegularExpression(
134 QRegularExpression::anchoredPattern(pattern.replace(QLatin1String(
"\\*"),
135 QLatin1String(
".+"))));
184void QQuickDropArea::dragMoveEvent(QDragMoveEvent *event)
187 if (!d->containsDrag)
190 d->dragPosition = event->position().toPoint();
192 emit d->drag->positionChanged();
195 QQuickDragEvent dragTargetEvent(d, event);
196 emit positionChanged(&dragTargetEvent);
224void QQuickDropArea::dragEnterEvent(QDragEnterEvent *event)
227 const QMimeData *mimeData = event->mimeData();
228 if (!d->effectiveEnable || d->containsDrag || !mimeData || !d->hasMatchingKey(d->getKeys(mimeData)))
231 const QQuickDragMimeData *dragMime = qobject_cast<
const QQuickDragMimeData *>(mimeData);
232 auto dragSource = dragMime ? dragMime->source() : event->source();
236 if (QQuickItem *dragSourceItem = qobject_cast<QQuickItem *>(dragSource)) {
237 if (dragSourceItem->isAncestorOf(
this))
241 d->dragPosition = event->position().toPoint();
245 QQuickDragEvent dragTargetEvent(d, event);
246 emit entered(&dragTargetEvent);
247 if (!event->isAccepted())
250 d->containsDrag =
true;
251 d->source = dragSource;
252 d->dragPosition = event->position().toPoint();
254 emit d->drag->positionChanged();
255 emit d->drag->sourceChanged();
257 emit containsDragChanged();
288void QQuickDropArea::dropEvent(QDropEvent *event)
291 if (!d->containsDrag)
294 QQuickDragEvent dragTargetEvent(d, event);
295 emit dropped(&dragTargetEvent);
297 d->containsDrag =
false;
299 emit containsDragChanged();
301 emit d->drag->sourceChanged();