Qt:视图坐标和添加项目的视图坐标之间的问题
Qt : problem between View coordinates and View coordinates to add item
我在 QGraphicsScene 和 QGraphicsView 上苦苦挣扎了 2 天。
当我点击视图的左上角 (0,0) 时,鼠标点击事件得到 0,0 但是当我将项目添加到场景时,它给出了不同的坐标,我找不到为什么。
我认为问题出在 scene->addItem
这是代码:
void GraphBoard::drawState(QPoint cpoint)
{
qDebug() << "Coordonnées QPoint dans drawState "<< cpoint;
qDebug() << "Coordonnées QPoint dans drawState x"<< cpoint.x();
qDebug() << "Coordonnées QPoint dans drawState y"<< cpoint.y();
QGraphicsEllipseItem * mellipse = new QGraphicsEllipseItem(cpoint.x(),cpoint.y(),100,100);
QPen pen;
pen.setWidth(8);
mellipse->setPen(pen);
scene->addItem(mellipse);
}
void GraphBoard::mousePressEvent(QMouseEvent *event)
{
qDebug() << "Coordonnées Mouse Press Event "<<event->pos();
if(globalAddStateMode==true)
{
if (event->button() == Qt::LeftButton) {
QPoint clickLocation=event->pos();
drawState(clickLocation);
globalAddStateMode=false;
}
}
}
qDebug()
Coordonnées Mouse Press Event QPoint(0,1)
Coordonnées QPoint dans drawState QPoint(0,1)
Coordonnées QPoint dans drawState x 0
Coordonnées QPoint dans drawState y 1
我程序的结果
我对场景所做的唯一事情是:
scene = new QGraphicsScene();
QPen pen;
//axis
pen.setStyle(Qt::DashLine);
scene->addLine(0,-800,0,800,pen);
scene->addLine(-800,0,800,0,pen); //horizontal line
view->setScene(scene);
scene->setBackgroundBrush(Qt::gray);
实际上我很快就解决了我的问题:
QPointF clickLocation=mapToScene(event->pos());
偏移量为 -50、-50:
QGraphicsEllipseItem * mellipse = new QGraphicsEllipseItem(cpoint.x()-50,cpoint.y()-50,100,100);
使圆圈出现在鼠标周围
我在 QGraphicsScene 和 QGraphicsView 上苦苦挣扎了 2 天。
当我点击视图的左上角 (0,0) 时,鼠标点击事件得到 0,0 但是当我将项目添加到场景时,它给出了不同的坐标,我找不到为什么。 我认为问题出在 scene->addItem
这是代码:
void GraphBoard::drawState(QPoint cpoint)
{
qDebug() << "Coordonnées QPoint dans drawState "<< cpoint;
qDebug() << "Coordonnées QPoint dans drawState x"<< cpoint.x();
qDebug() << "Coordonnées QPoint dans drawState y"<< cpoint.y();
QGraphicsEllipseItem * mellipse = new QGraphicsEllipseItem(cpoint.x(),cpoint.y(),100,100);
QPen pen;
pen.setWidth(8);
mellipse->setPen(pen);
scene->addItem(mellipse);
}
void GraphBoard::mousePressEvent(QMouseEvent *event)
{
qDebug() << "Coordonnées Mouse Press Event "<<event->pos();
if(globalAddStateMode==true)
{
if (event->button() == Qt::LeftButton) {
QPoint clickLocation=event->pos();
drawState(clickLocation);
globalAddStateMode=false;
}
}
}
qDebug()
Coordonnées Mouse Press Event QPoint(0,1)
Coordonnées QPoint dans drawState QPoint(0,1)
Coordonnées QPoint dans drawState x 0
Coordonnées QPoint dans drawState y 1
我程序的结果
我对场景所做的唯一事情是:
scene = new QGraphicsScene();
QPen pen;
//axis
pen.setStyle(Qt::DashLine);
scene->addLine(0,-800,0,800,pen);
scene->addLine(-800,0,800,0,pen); //horizontal line
view->setScene(scene);
scene->setBackgroundBrush(Qt::gray);
实际上我很快就解决了我的问题:
QPointF clickLocation=mapToScene(event->pos());
偏移量为 -50、-50:
QGraphicsEllipseItem * mellipse = new QGraphicsEllipseItem(cpoint.x()-50,cpoint.y()-50,100,100);
使圆圈出现在鼠标周围