void DragTool::mousePressEvent(QMouseEvent *event) { if (event->button() == Qt::LeftButton) { const QMargins margins = contentsMargins(); const QRect iconRect((width() - d->iconSize.width()) / 2, margins.top(), d->iconSize.width(), d->iconSize.height()); if (iconRect.contains(event->pos())) { auto drag = new QDrag(this); auto mimeData = new QMimeData; QByteArray data; QDataStream dataStream(&data, QIODevice::WriteOnly); dataStream << d->newElementId << d->title << d->stereotype; mimeData->setData(QLatin1String(qmt::MIME_TYPE_NEW_MODEL_ELEMENTS), data); drag->setMimeData(mimeData); QPixmap pixmap = d->icon.pixmap(d->iconSize, QIcon::Normal, QIcon::Off); QPainter painter(&pixmap); painter.setCompositionMode(QPainter::CompositionMode_DestinationIn); painter.fillRect(pixmap.rect(), QColor(0, 0, 0, 96)); drag->setPixmap(pixmap); drag->setHotSpot(QPoint(drag->pixmap().width() / 2, drag->pixmap().height() / 2)); d->disableFrame = true; update(); Qt::DropAction dropAction = drag->exec(); Q_UNUSED(dropAction); d->disableFrame = false; update(); } } }
void BlockTreeWidget::mouseMoveEvent(QMouseEvent *event) { if(!(event->buttons() & Qt::LeftButton)) { QTreeWidget::mouseMoveEvent(event); return; } if((event->pos() - _dragStartPos).manhattanLength() < QApplication::startDragDistance()) { QTreeWidget::mouseMoveEvent(event); return; } //get the block data auto blockItem = dynamic_cast<BlockTreeWidgetItem *>(itemAt(_dragStartPos)); if (not blockItem->getBlockDesc()) return; //create a block object to render the image auto draw = dynamic_cast<GraphEditorTabs *>(getObjectMap()["editorTabs"])->getCurrentGraphEditor()->getCurrentGraphDraw(); std::shared_ptr<GraphBlock> renderBlock(new GraphBlock(draw)); renderBlock->setBlockDesc(blockItem->getBlockDesc()); renderBlock->prerender(); //precalculate so we can get bounds const auto bounds = renderBlock->boundingRect(); //draw the block's preview onto a mini pixmap QPixmap pixmap(bounds.size().toSize()+QSize(2,2)); pixmap.fill(Qt::transparent); QPainter painter(&pixmap); painter.translate(-bounds.topLeft()+QPoint(1,1)); //painter.scale(zoomScale, zoomScale); //TODO get zoomscale from draw painter.setRenderHint(QPainter::Antialiasing); painter.setRenderHint(QPainter::HighQualityAntialiasing); painter.setRenderHint(QPainter::SmoothPixmapTransform); renderBlock->render(painter); renderBlock.reset(); painter.end(); //create the drag object auto mimeData = new QMimeData(); std::ostringstream oss; blockItem->getBlockDesc()->stringify(oss); QByteArray byteArray(oss.str().c_str(), oss.str().size()); mimeData->setData("text/json/pothos_block", byteArray); auto drag = new QDrag(this); drag->setMimeData(mimeData); drag->setPixmap(pixmap); drag->setHotSpot(-bounds.topLeft().toPoint()); drag->exec(Qt::CopyAction | Qt::MoveAction); }
void OSItem::mouseMoveEvent(QMouseEvent *event) { if (!m_draggable){ return; } if (!m_mouseDown){ return; } if (!(event->buttons() && Qt::LeftButton)){ return; } if ((event->pos() - m_dragStartPosition).manhattanLength() < QApplication::startDragDistance()){ return; } // start a drag m_mouseDown = false; QString mimeDataText = m_itemId.mimeDataText(); auto mimeData = new QMimeData; mimeData->setText(mimeDataText); QWidget* parent = this->parentWidget(); OS_ASSERT(parent); // parent the QDrag on this parent instead of this, in case this item is deleted during drag auto drag = new QDrag(parent); drag->setMimeData(mimeData); QPixmap _pixmap(size()); _pixmap.fill(Qt::transparent); render(&_pixmap,QPoint(),QRegion(),RenderFlags(DrawChildren)); drag->setPixmap(_pixmap); drag->setHotSpot(event->pos()); drag->exec(Qt::CopyAction); }
int QGesture::qt_metacall(QMetaObject::Call _c, int _id, void **_a) { _id = QObject::qt_metacall(_c, _id, _a); if (_id < 0) return _id; #ifndef QT_NO_PROPERTIES if (_c == QMetaObject::ReadProperty) { void *_v = _a[0]; switch (_id) { case 0: *reinterpret_cast< Qt::GestureState*>(_v) = state(); break; case 1: *reinterpret_cast< Qt::GestureType*>(_v) = gestureType(); break; case 2: *reinterpret_cast< QGesture::GestureCancelPolicy*>(_v) = gestureCancelPolicy(); break; case 3: *reinterpret_cast< QPointF*>(_v) = hotSpot(); break; case 4: *reinterpret_cast< bool*>(_v) = hasHotSpot(); break; } _id -= 5; } else if (_c == QMetaObject::WriteProperty) { void *_v = _a[0]; switch (_id) { case 2: setGestureCancelPolicy(*reinterpret_cast< QGesture::GestureCancelPolicy*>(_v)); break; case 3: setHotSpot(*reinterpret_cast< QPointF*>(_v)); break; } _id -= 5; } else if (_c == QMetaObject::ResetProperty) { switch (_id) { case 3: unsetHotSpot(); break; } _id -= 5; } else if (_c == QMetaObject::QueryPropertyDesignable) { _id -= 5; } else if (_c == QMetaObject::QueryPropertyScriptable) { _id -= 5; } else if (_c == QMetaObject::QueryPropertyStored) { _id -= 5; } else if (_c == QMetaObject::QueryPropertyEditable) { _id -= 5; } else if (_c == QMetaObject::QueryPropertyUser) { _id -= 5; } #endif // QT_NO_PROPERTIES return _id; }
void MyItem::mouseMoveEvent(QGraphicsSceneMouseEvent *e) { bool isDrag = QLineF(e->screenPos(), e->buttonDownScreenPos(Qt::LeftButton)).length() >= QApplication::startDragDistance(); if (!isDrag) { return; } auto drag = new QDrag(e->widget()); auto mime = new QMimeData; drag->setMimeData(mime); mime->setColorData(color); QPixmap pix(21, 21); pix.fill(Qt::transparent); QPainter painter(&pix); paint(&painter, nullptr, nullptr); drag->setPixmap(pix); drag->setHotSpot(QPoint(10, 15)); drag->exec(); setCursor(QCursor(Qt::OpenHandCursor)); }
void mousePressEvent(QMouseEvent* event) override { if (event->button() == Qt::LeftButton) { auto as = Engine::ossia_to_iscore::ToFullAddressSettings(m_node); auto drag = new QDrag(this); auto mimeData = new QMimeData; { Mime<Device::FullAddressSettings>::Serializer s{*mimeData}; s.serialize(as); } { Mime<State::MessageList>::Serializer s{*mimeData}; s.serialize({State::Message{State::AddressAccessor{as.address}, as.value}}); } drag->setMimeData(mimeData); drag->setPixmap(grab()); drag->setHotSpot(rect().center()); drag->exec(); } }
void CursorShape::resetToEmpty() { setDimension(&Dimension(0, 0)); setHotSpot(0, 0); }