QT识别场景中的所选项目

时间:2011-03-28 01:01:05

标签: qt qt4 qt4dotnet

我一直在创建一个QT应用程序但是在一个地方。我已经创建了自己的自定义场景类派生自QGraphicsScene,我将我的项目如汽车,公共汽车等添加到屏幕上。

void Scene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
{

    if (mouseEvent->button() != Qt::LeftButton)
        return;

    DiagramItem *item;
    switch (myMode) {
        case InsertItem:
            item = new DiagramItem(myItemType, myItemMenu);
            addItem(item);
            item->setPos(mouseEvent->scenePos());
            emit itemInserted(item);
            break;

从上面的代码中我可以看到,我有一个从QGraphicsPixmapItem派生的DiagramItem类,用于向场景中添加不同的项目。

 switch (myDiagramType) {
        case Bus:
             setPixmap( QPixmap( Dir+"/images/bus1.jpg"  ));
            break;
        case Car:
            setPixmap( QPixmap( Dir+"/images/car4scene.png"  ));
            break;
        case Truck:

我想在这里实现的是,当我从现场(汽车或公共汽车)中选择我的物品时,我想知道哪辆车被选中了汽车,公共汽车或卡车。我不知道如何继续这样做。谁能帮我 。我从场景中得到了这样的选定项目。

void MainWindow :: itemSelected(QGraphicsItem * item)//从场景发送的信号。 {

DiagramItem *ItemSelect = qgraphicsitem_cast<DiagramItem *>(item);

//想知道'ItemSelect'是汽车或公共汽车或任何其他车辆

}

2 个答案:

答案 0 :(得分:3)

在不导出自定义类的情况下在QGraphicsItem中存储自定义数据的方法是使用data()setData()。您可以使用存储的数据进行识别。

答案 1 :(得分:1)

如果DiagramItem属于您自己的设计,只需在内部保留类型并提供查询方法。或者,保持一个散列,其中key是DiagramItem *,value是类型。