我的问题是,当我将值设置为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循环中,您打印映射的元素(tl
和br
),而不是在while循环之后打印的(未初始化的)topLeft
。这就是为什么您得到不同的结果。