0

我的问题是,当我将值设置为 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 的值。我不希望它变成那个值。

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

4

1 回答 1

1

topLeft未初始化。

仅当满足您的条件时才为topLeft(or )赋值。bottomRight因此,请确保将矩形初始化为合理的值,以便在 if 语句中进行有意义的比较。

此外,topLeft不会像您假设的那样改变。在 while 循环中,您打印 map 的元素(tlbr),而不是在 while 循环之后打印的(未初始化的)topLeft。这就是为什么你会得到不同的结果。

于 2012-07-11T14:58:57.823 回答