#include "mygraphicsview.h" #include #include #include #include MyGraphicsView::MyGraphicsView(QWidget *parent) : QGraphicsView(parent) { setAcceptDrops(true); viewport()->setAcceptDrops(true); setRenderHint(QPainter::Antialiasing); setFocusPolicy(Qt::StrongFocus); // 让view能接收键盘事件 } void MyGraphicsView::dragEnterEvent(QDragEnterEvent *event) { if (event->mimeData()->hasFormat("application/x-component")) event->acceptProposedAction(); else event->ignore(); } void MyGraphicsView::dragMoveEvent(QDragMoveEvent *event) { if (event->mimeData()->hasFormat("application/x-component")) event->acceptProposedAction(); else event->ignore(); } void MyGraphicsView::dropEvent(QDropEvent *event) { if (!event->mimeData()->hasFormat("application/x-component")) { event->ignore(); return; } QString type = QString::fromUtf8(event->mimeData()->data("application/x-component")); QPointF scenePos = mapToScene(event->pos()); Item *item = new Item(type); item->setPos(scenePos); if (scene()) scene()->addItem(item); event->acceptProposedAction(); } void MyGraphicsView::keyPressEvent(QKeyEvent *event) { if (event->key() == Qt::Key_Delete && scene()) { // 删除所有被选中的图元 QList selectedItems = scene()->selectedItems(); for (QGraphicsItem* item : selectedItems) { scene()->removeItem(item); delete item; } } else { QGraphicsView::keyPressEvent(event); } }