
[英]How do I find the largest value smaller than or equal to X and the smallest value greater than or equal to X?
[英]Find largest X pos value in QGraphicsItems
如何遍历一组Qt QGraphicsItems并在所选图形项中找到最大X值。 我有一个似乎工作的功能,但我记得将min值设置为NULL并不理想。 我这样做的唯一原因是因为否则这个价值会疯狂地返回一些东西。 我只是不觉得我这样做是最有效的方式。 请记住,我要考虑实际图表项目本身的宽度。
float max = NULL;
foreach (QGraphicsItem* item, items) {
if (!item) continue;
if (item->type() == NexusBlockItem::Type) {
float x = item->pos().x() + item->sceneBoundingRect().width()*.5;
if (max == NULL) max = x;
if (x > max) {
max = x;
}
}
}
我有一个似乎工作的功能,但我记得将min值设置为NULL并不理想。
实际上不可能将浮点值设置为NULL,因为在C ++中只有指针可以为NULL,而float不是指针类型。 你可能实际上在做什么是将max初始化为0.0f(因为NULL通常定义为0),但从概念上讲它没有任何意义,当然如果你的任何实际x位置它会弄乱你的结果小于零。
至于如何更好地做到这一点,你有两个我能想到的选择:
1)添加一个单独的maximum_value_is_set变量来跟踪你的max变量尚未初始化的时间。
float max; // not initialized here, because...
bool maximum_value_is_set = false; // we'll keep track of it this way instead
[...]
float x = item->pos().x() + item->sceneBoundingRect().width()*.5;
if ((maximum_value_is_set == false)||(x > max)) {
max = x;
maximum_value_is_set = true;
}
2)或者,您可以将max的默认值设置为可能的最小浮点值:
float max = -FLT_MAX;
[...]
......那样任何可以想象的x值都会大于max的原始值。
顺便说一句...
float x = item->pos().x() + item->sceneBoundingRect().width()*.5;
为什么* .5在那里? 看起来这段代码计算矩形的中心,但根据你的图形,你对右侧更感兴趣(在这种情况下,我认为你想要摆脱* .5)。
此代码适用于您分享的内容。
float max = 0;
foreach (QGraphicsItem* item, items) {
if (!item) continue;
if (item->type() == NexusBlockItem::Type) {
float x = item->boundingRect().width();
if (x > max) {
max = x;
}
}
但如果你的第二个项目或其他项目转移到更正确的权利
用品 - > boundingRect()windth(); 没有给出正确的价值。
“X”的最大值是多少? 是最大项目的宽度或场景矩形的宽度?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.