내 장면에서 사용자 지정 QGraphicsItem을 생성하려고 시도했지만 지점을 원점에서 항목으로 얼마나 정확하게 매핑해야하는지 확신 할 수 없습니다. 내 위치 내 MainWindow를에 dropEvent에서 온다 :MainWindow에서 QGraphicsItem으로 매핑하는 방법은 무엇입니까?
void MainWindow::dropEvent(QDropEvent *event)
{
QPointF dropPos = ui->GraphicsView->mapFrom(this, event->pos());
vModule *module = new vModule(dropPos);
ui->GraphicsView->scene->addItem(module);
}
이 내 vModule.cpp입니다 :
vModule::vModule(QPointF dropPos)
{
QPointF pos = mapFromScene(dropPos);
setX(pos.x());
setY(pos.y());
// ...
}
// Event handler implementation, shouldn't be relevant
그리고 내 vModule.h :
class vModule : public QObject, public QGraphicsItem
{
public:
explicit vModule(QPointF dropPos);
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
QRectF boundingRect() const;
protected:
void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
void mousePressEvent(QGraphicsSceneMouseEvent *event);
}
이에 가장 가까운 것 나는 논리적으로 변환이 될 것이라고 생각했지만, 실제 상황에서는 이벤트의 위치를 그대로 전달하는 것보다 더 잘못되었습니다. (메인 윈도우와 위치가 일정한 차이가 있습니까?). 아무도 내 오류를 수정할 수 있습니까?
그래서 좌표를 매핑하여 문제를 해결했습니다 ... 세 번. 드롭 시작하는 좌표, 나는 다음과 같은 방법으로지도 : 드롭 위치 -> drawArea (mapFromParent) -> drawArea (mapToScene) -> graphicsItem (mapFromScene)이 매핑 모두가 MainWindow를에서 수행된다. 그래도이 작업을 수행하는 더 좋은 방법이있을 것입니다 ... – c0nn