2012-07-06 2 views
0

내 문제는 QPointF로 값을 설정할 때 실제 상태를 확인할 때 이상한 값 (예 : 1.32841e + 09)이 발생한다는 것입니다. while 루프의 여섯 번째 줄에 출력 할 때 그 값을 얻지 못했습니다.QRectF에 대해 왼쪽 위와 아래 오른쪽으로 설정

void MainView::showAllGraphs(){ 
    QMapIterator<QString, QRectF> i(graphRectangles); 
    QPointF topLeft; 
    QPointF bottomRight; 
    QRectF maxRect; 
while (i.hasNext()) { 
    i.next(); 
    qreal tlX = i.value().topLeft().x(); 
    qreal tlY = i.value().topLeft().y(); 
    qreal brX = i.value().bottomRight().x(); 
    qreal brY = i.value().bottomRight().y(); 
    QTextStream(stdout) << tlY << " " << brY << endl; 
    if(tlY < topLeft.y()){ 
     topLeft.setY(tlY); 
     topLeft.setX(tlX); 
    } 
    if(brY > bottomRight.y()){ 
     bottomRight.setY(brY); 
     bottomRight.setX(brX); 
    } 
} 
maxRect.setTopLeft(topLeft); 
maxRect.setBottomRight(bottomRight); 
QTextStream(stdout) << topLeft.y() << " x " << topLeft.y() << endl; 
graphicsScene>setSceneRect(maxRect); 
graphicsView->fitInView(maxRect); 
matrixUpdated(graphicsView->matrix()); 
} 

첫 번째 인쇄에서는 -100과 100 사이의 값을 얻습니다 (유효 함). 마지막에 인쇄 할 때 나는 갑자기 2.45841e + 09 또는 때로는 0과 같은 값을 얻습니다. 나는 그것을 변화 시키길 원치 않습니다.

그렇다면이 가치 변화의 이유는 무엇입니까? 나는 그것이 왜 그런 가치로 설정되었는지 알 수 없다.

+0

예제가 약간 일관성이 없습니다 (예를 들어,'topLeft.y() '를 두 번 인쇄하는 이유는 무엇입니까?) 또한 문제의 중심이 아닌 불필요한 호출을 제거한 경우 더 유익 할 것입니다. 예를 들면 : graphicsScene/graphicsView/matrixUpdated 호출을 꺼내면 여전히 문제가 있습니까? 고정 된 정보 목록을 전달하는 작은 프로그램에서 문제를 격리시킬 수 있습니까? http://sscce.org/에서 살펴보십시오. – HostileFork

답변

1

topLeft은 초기화되지 않았습니다.

조건이 충족 될 경우에만 topLeft (또는 bottomRight)으로 값을 할당하십시오. 따라서 if 문에서 의미있는 비교를 허용하는 적절한 값으로 사각형을 초기화해야합니다.

더욱이 topLeft으로 변경되지 않았습니다.으로 추정됩니다. while 루프에서는 while 루프 이후에 인쇄 할 tlbr이 아닌 (초기화되지 않음) topLeft을 인쇄합니다. 그것이 다른 결과를 얻는 이유입니다.

관련 문제