모양이 현재 어디에 있는지를 알 수있는 온라인 모니터링 시스템을 원했지만 항목의 매우 이상한 좌표를 얻었습니다. 새 항목을 만들고 끌 때마다 항목의 크기가 1 씩 높아졌습니다.드래그 해제 후 QGraphicsRectItem의 위치를 올바르게 얻는 방법은 무엇입니까?
초기 위치 (지도의 크기는 노란색 공간에 바인딩 qDebug()
, 현장에 출력에 의해 확인, 751에 의해 751입니다) :
왼쪽 상단 모서리에 드래그.
당신이에 있던 시작에서 볼 수 있듯이 (200, 200), 그러나 드래그 후가 (-201, -196)에 있습니다. 삭제하고 동일한 속성으로 같은 위치에 새 모양을 만든 후에는지도 외부에 있기 때문에 새 모양을 볼 수 없으므로 수정 사항이 올바른 데이터를 나타내지 못합니다.
다음void MainWindow::updateEdits(QAbstractGraphicsShapeItem* item)
{
//stuff not related to scene
auto posReal = item->scenePos();
auto pos = posReal.toPoint();
//create QString from coordinates
QString coordinate;
coordinate.setNum(pos.x());
ui->leftXEdit->setText(coordinate);
coordinate.setNum(pos.y());
ui->upperYEdit->setText(coordinate);
//get width and height for rect, radius for circle
auto boundingRectReal = item->sceneBoundingRect();
auto boundingRect = boundingRectReal.toRect();
ui->widthEdit->setText(QString::number(boundingRect.width()));
//disables height edit for circles, not really relevant
if (!items[currentShapeIndex].isRect)
{
ui->heightEdit->setDisabled(true);
}
else
{
ui->heightEdit->setDisabled(false);
ui->heightEdit->setText(QString::number(boundingRect.height()));
}
}
내가 왼쪽 상단 모서리에 QGraphicsScene
을 고정하는 방법입니다
void CallableGraphicsRectItem::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
{
QGraphicsRectItem::mouseReleaseEvent(event);
ptr->updateEdits(this);
}
내가 updateEdits()
으로 줄이기 위해 관리하는 것입니다 : 여기
scene->setSceneRect(0, 0, mapSize.width() - 20, mapSize.height() - 20);
ui->graphicsView->setScene(scene);
데이터를 수정 사항에 적용 하시겠습니까?
"boundingRect"와 "sceneBoundingRect"는 항목의 변형 행렬이 적용된 경우가 아니면 왼쪽 위 값과 왼쪽 위 값이 다르지만 일반적으로 너비와 높이가 다르지 않습니다. – goug
'ItemSendsScenePositionChanges'라는 플래그를 발견했습니다. 더 낫니? – Incomputable
좋지 않습니다. 그것은 다르다. 두 플래그에서 문서를 확인하고 어떤 상황에서 적합한 지 확인하십시오. – goug