Давайте рассмотрим эту функцию, остальное уже будет понятно. Вопросы написал в коде в виде комментов.
Код | void DragWidget::mousePressEvent(QMouseEvent *event) { QLabel *child = static_cast<QLabel*>(childAt(event->pos())); if (!child) return;
QPixmap pixmap = *child->pixmap();
//создается блок памяти, в которой записывается картинка и позиция нового рисунка? //Если да, то почему именно эти данные? Что других данных нету? QByteArray itemData; QDataStream dataStream(&itemData, QIODevice::WriteOnly); dataStream << pixmap << QPoint(event->pos() - child->pos());
//Это как я понимаю тоже блок памяти? Для "тени" виджета во время перемещения? QMimeData *mimeData = new QMimeData; mimeData->setData("application/x-dnditemdata", itemData);//здесь что за первый параметр?
QDrag *drag = new QDrag(this); drag->setMimeData(mimeData); drag->setPixmap(pixmap); drag->setHotSpot(event->pos() - child->pos());
QPixmap tempPixmap = pixmap; QPainter painter; painter.begin(&tempPixmap); painter.fillRect(pixmap.rect(), QColor(127, 127, 127, 127)); painter.end();
child->setPixmap(tempPixmap);
if (drag->exec(Qt::CopyAction | Qt::MoveAction, Qt::CopyAction) == Qt::MoveAction) child->close(); else { child->show(); child->setPixmap(pixmap); } }
|
Если не трудно в общих словах обьясните те части кода, где я оставил комменты.
|