我试图在我的场景中生成一个自定义 QGraphicsItem,但不确定如何将点从其原点准确映射到项目。我的位置来自 MainWindow 中的 dropEvent:
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);
}
这与我在逻辑上认为的转换最接近,但在实践中这是非常错误的,比简单地从事件中按原样传递位置更错误(这是与主窗口位置的恒定差异?)。谁能纠正我的错误?