2012-09-18 7 views
4

qgraphicsscene에 격자를 그리고 QLineF으로 격자를 그리고 사용자 정의 qgraphicsitems을 격자의 블록으로 추가 할 수 있습니다. 서로 다른 간격 및 색인을 사용하여 격자를 다시 그리기를 원합니다 (색인은 두꺼운 선).QGraphicsScene에서 단일 항목/QLineF를 제거하십시오.

내 문제는 단지 선을 제거하는 방법을 모르겠다. 장면에서 모든 것을 제거 할 수는 있지만 사용자 정의 항목을 모두 배열에 복사 한 다음 다시 장면에 추가해야하므로 너무 많은 작업이 필요합니다. 줄에 포인터 목록을 만들려고했지만 포인터를 삭제할 수 없습니다. 또한 줄을 자식으로 추가하여 qgraphicsitem에 추가하고 모든 줄을 삭제할 수있는 항목을 삭제했지만 줄을 부모로 설정할 수는 없습니다.

QGraphicsScene에서 특정 회선 구성 요소를 제거하려면 어떻게합니까? 이처럼

: scene->removeItem(..pointer..); 내가 잘못 대상으로 scene->addItem(..)의 결과를 잡는 한 후이 & 참조의 저장. 결과를 포인터로 저장할 때 항목을 다시 조작 할 수있었습니다. 당신은 QGraphicsItemGroup 사용할 수

+1

"...하지만 포인터를 삭제할 수 없습니다." 왜? 'QGraphicsScene :: addLine (..)'을 사용하면 라인 포인터를 반환합니다. 이것을 사용하고 있습니까? – cmannett85

+1

QLineF 객체를 만든 다음 그 객체에 대한 포인터를 만들어서 벡터로 푸시합니다. 반환 된 포인터를 사용하면 같은 것이라고 생각합니까? 나중에 벡터를 반복하면서 다음과 같이 삭제하려고합니다 :'QLineF * grab = linevector.at (i); 잡아 삭제; grab = NULL;' – deprecated

+0

혼란 스럽습니다. 어떻게'QLineF'를 장면에 담고 있습니까? – cmannett85

답변

1

- 같은 http://qt-project.org/doc/qt-4.8/qgraphicsitemgroup.html, 뭔가를 ...

void Grid::addVerticalLineAt(qreal xCoord) 
{ 
    QRectF sceneRect = scene()->sceneRect(); 
    QGraphicsLineItem* line = scene()->addLine(xCoord, mapFromScene(sceneRect.top()), xCoord, mapFromScene(sceneRect.bottom())); 
    (QGraphicsItemGroup*)(this->gridLines)->addToGroup(line); 
} 
void Grid::Refresh(qreal p_Scale) 
{ 
    delete this->gridLines;      //deletes all lines underneath 
    gridLines = new QGraphicsItemGroup(this); //construct this _before_ you start calling addXXXLineAt 
    qreal spacing = BASIC_SPACING * p_Scale; 
    for(qreal curXCoord = sceneRect.left(); curXCoord < sceneRect.right(); curXCoord += spacing) //each spaced point in scenerect 
    { 
     addVerticalLineAt(curXCoord); 
    } 
} 

은 ... 작동합니다.

또 다른 방법은 Grid라는 또 다른 QGraphicsItem을 추가하고 QGraphicsLineItem ctor에 부모를 설정하여 해당 항목에 모든 QLineF를 할당하는 것입니다.

관련 문제