QT идентифицирует выбранный элемент из сцены - PullRequest
0 голосов
/ 28 марта 2011

Я создавал приложение 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;

Как видно из приведенного выше кода, у меня есть класс DiagramItem, производный от QGraphicsPixmapItem для добавления другого элемента в сцену.

 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 ]

3 голосов
/ 28 марта 2011

Способ хранения пользовательских данных в QGraphicsItem без получения пользовательского класса - использовать data() и setData().Вы можете использовать сохраненные данные для идентификации.

1 голос
/ 28 марта 2011

Если DiagramItem имеет собственный дизайн, просто сохраните тип внутри и предоставьте метод для его запроса. Либо сохраните хеш, где ключом является DiagramItem *, а значением является тип.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...