0

私は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」が車またはバスまたはその他の車両であることを知りたい

}

4

2 に答える 2

3

カスタムクラスを派生させずにカスタムデータをQGraphicsItemに格納する方法は、とを使用することdata()ですsetData()。保存されたデータを識別に使用できます。

于 2011-03-28T13:04:19.550 に答える
1

DiagramItemが独自の設計である場合は、型を内部的に保持し、それを照会するためのメソッドを提供するだけです。または、キーがDiagramItem *で、値がタイプであるハッシュを保持します。

于 2011-03-28T01:27:10.110 に答える