C++ 功能:从QGraphicscene获取单击的对象

C++ 功能:从QGraphicscene获取单击的对象,c++,qt,coordinates,qgraphicsitem,qgraphicsscene,C++,Qt,Coordinates,Qgraphicsitem,Qgraphicsscene,我是编程新手,需要帮助 我有一个类Station,它包含X和Y字段: Class Station { int x int y ... } 所有站点都在qgraphicscene上绘制为圆圈和文本: this->scene.addEllipse(x1, y1, diam, diam, pen, QBrush(...)); 我需要一个函数getClickedStation,它正在等待单击qgraphicscene,查找圆并返回与其坐标相对应的站: Station* getClickedSt

我是编程新手,需要帮助

我有一个类
Station
,它包含
X
Y
字段:

Class Station {
int x
int y
...
}
所有站点都在
qgraphicscene
上绘制为圆圈和文本:

this->scene.addEllipse(x1, y1, diam, diam, pen, QBrush(...));
我需要一个函数
getClickedStation
,它正在等待单击
qgraphicscene
,查找圆并返回与其坐标相对应的站:

Station* getClickedStation(...) { ... }
QList<QGraphicsItem*> listSelectedItems = scene.selectedItems();
QGraphicsItem* item = listSelectedItems.first();
ui->textBrowserMenu->append(QString::number(item->boundingRect().x()));
ui->textBrowserMenu->append(QString::number(item->boundingRect().y()));
有什么办法吗

我试过这个只是为了得到坐标:

Station* getClickedStation(...) { ... }
QList<QGraphicsItem*> listSelectedItems = scene.selectedItems();
QGraphicsItem* item = listSelectedItems.first();
ui->textBrowserMenu->append(QString::number(item->boundingRect().x()));
ui->textBrowserMenu->append(QString::number(item->boundingRect().y()));
QList listSelectedItems=scene.selectedItems();
QGraphicsItem*item=listSelectedItems.first();
ui->textBrowserMenu->append(QString::number(item->boundingRect().x());
ui->textBrowserMenu->append(QString::number(item->boundingRect().y());

但是程序崩溃了…

不,你做错了。我写了一个小例子。您应该子类化
qgraphicscene
并重新实现
mousePressEvent
并处理其中的点击。例如:

*h

\ifndef graphicscene\u H
#定义图形SCene_H
#包括
#包括
#包括
Graphicscene类:公共QGraphicscene
{
Q_对象
公众:
显式Graphicscene(QObject*parent=0);
受保护的:
void mousePressEvent(QGraphicsSceneMouseEvent*mouseEvent);
};
#endif//graphicscene_H
在cpp中

void GraphicsScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
{
    //qDebug() << "in";
    if (mouseEvent->button() == Qt::LeftButton)
    {
        QGraphicsItem *item = itemAt(mouseEvent->scenePos(), QTransform());// it is your clicked item, you can do everything what you want. for example send it somewhere
        QGraphicsEllipseItem *ell = qgraphicsitem_cast<QGraphicsEllipseItem *>(item);
        if(ell)
        {
            ell->setBrush(QBrush(Qt::black));
        }
        else
            qDebug() << "not ell" << mouseEvent->scenePos();
        }

}
void graphicscene::mousePressEvent(qgraphicscenemouseevent*mouseEvent)
{
//qDebug()按钮()==Qt::LeftButton)
{
QGraphicsItem*item=itemAt(mouseEvent->scenePos(),QTransform());//这是您单击的项目,您可以做任何您想做的事情。例如,将其发送到某处
QGraphicsSellipseitem*ell=qgraphicsitem\u铸件(项目);
如果(厄尔)
{
ell->setBrush(QBrush(Qt::黑色));
}
其他的

qDebug()到目前为止你尝试了什么?试着发布一个。另外,仔细阅读,我找到了唯一一种获得其坐标的方法:ell->boundingRect().x();ell->boundingRect().x()