Ich habe auf einem QMainWindow einen QGraphicsView.
Da ich die QGraphicsItems später mit der Maus bewegen möchte, habe ich meine eigene Klasse (DragAndDropScene) erstellt, welche von QGrahicsScene erbt.
Im MainWindow erstelle ich eine scene und eine Linie:
Code: Alles auswählen
scene = new DragAndDropScene();
graphicsView->setScene(scene);
QGraphicsLineItem *line = new QGraphicsLineItem(200, 0, 200, 300);
scene->addItem(line);
graphicsView->fitInView(0, 0, 800, 300, Qt::KeepAspectRatio);
Um jetzt das QGraphicsLineItem aber mit der Maus bewegen zu können, habe ich in der Klasse DragAndDropScene folgendes gemacht:
Code: Alles auswählen
void DragAndDropScene::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
dragingItem = itemAt(event->scenePos(), QTransform());
mousePressed = true;
QGraphicsScene::mousePressEvent(event);
}
void DragAndDropScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
{
if(mousePressed)
{
if(dragingItem != NULL)
{
dragingItem->setPos(event->scenePos);
}
}
QGraphicsScene::mouseMoveEvent(event);
}
void DragAndDropScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
{
mousePressed = false;
dragingItem = NULL;
QGraphicsScene::mouseReleaseEvent(event);
}
Dieser Offset ist aber auch nicht konstant, sondern hängt davon ab, wo sich die Line zu Begin der Bewegung befand.
Ich kann mir das nicht so genau erklären, was mache ich falsch?
Gruß
Doran