【问题标题】:QT identifying selected item from a sceneQT 从场景中识别所选项目
【发布时间】:2011-03-28 21:04:19
【问题描述】:

我一直在创建 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' 是汽车或公共汽车或任何其他车辆

}

【问题讨论】:

    标签: qt qt4 qt4dotnet


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-02
        • 1970-01-01
        • 2011-08-20
        • 2016-04-13
        • 1970-01-01
        相关资源
        最近更新 更多