为QRectF设置topLeft和bottomRight

时间:2012-07-06 07:35:31

标签: c++ qt

我的问题是,当我为QPointF设置值时,当我检查它们到底是什么时,我会得到像1.32841e + 09这样的奇怪值。 当我在while循环的第六行打印出来时,我没有得到这些值。

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的值。我不希望它改变为那个。

那么这种价值变化的原因是什么?我无法弄清楚为什么它被设置为这样的值。

1 个答案:

答案 0 :(得分:1)

topLeft未初始化。

如果符合条件,您只需为topLeft(或bottomRight)分配值。因此,请确保将矩形初始化为合理的值,以便在if语句中进行有意义的比较。

此外,您假设topLeft更改。在while循环中,您可以打印地图元素(tlbr),(未初始化)topLeft环。这就是你得到不同结果的原因。