我试图让哪个项目更接近鼠标 coord.x 或 coord.y 我想它是类似的东西,但在尝试了很多之后还是没有得到它。我得到了鼠标坐标,它只是 QList 的一部分,我无法得到它。
void findcloser()
{
QList<QGraphicsItem *> allitems = items();
QList<QGraphicsItem *> alltypedos;
foreach(auto item, allitems) {
if(item->type() == chord::Type) {
alltypedos.append(item);
}
}
getcloser(alltypedos.begin(), alltypedos.end(), mouse.x);
getcloser(alltypedos.begin(), alltypedos.end(), mouse.y);
}
计算两点之间距离的最简单方法是使用QLineF
类:
class GraphicsView: public QGraphicsView
{
Q_OBJECT
public:
GraphicsView(QWidget* parent=nullptr): QGraphicsView(parent){}
virtual void mousePressEvent(QMouseEvent* event) override
{
// Take the position of the mouse in the scene coords
QPointF const pos = mapToScene(event->pos());
for(QGraphicsItem* item : scene()->items())
{
// Take the position of the items center
QPointF itemPos = item->mapToScene(item->boundingRect().center());
QLineF const distance(pos, itemPos);
qDebug() << pos << itemPos << distance.length();
}
qDebug() << "---";
}
};
当你有一个项目和鼠标之间的距离时,它只是找到最小值:
virtual void mousePressEvent(QMouseEvent* event) override
{
QPointF const pos = mapToScene(event->pos());
QList<QGraphicsItem*> items = scene()->items();
auto closest = std::min_element(items.begin(), items.end(), [pos](const QGraphicsItem* left, const QGraphicsItem* right)
{
QPointF const leftPos = left->mapToScene(left->boundingRect().center());
QPointF const rightPos = right->mapToScene(right->boundingRect().center());
QLineF const distanceLeft(pos, leftPos);
QLineF const distanceRight(pos, rightPos);
return distanceLeft.length() < distanceRight.length();
});
QGraphicsRectItem* item = dynamic_cast<QGraphicsRectItem*>(*closest);
item->setBrush(Qt::red);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句