我的问题是,当我将值设置为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的值。我不希望它更改为该值。

那么,这种价值变化的原因是什么呢?我不知道为什么将它设置为这样的值。

最佳答案

topLeft未初始化。

仅在满足条件的情况下才为topLeft(或bottomRight)分配一个值。因此,请确保将矩形初始化为明智的值,以便在if语句中进行有意义的比较。

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

10-08 03:09